본문 바로가기

Java/spring20

spring security를 알아보자 - 8 저번까진 spring security에서 제공하는 비밀번호 인코딩 해싱에 대해 봤다. 이번엔 Authentication Provider에 대해 자세히 아라보자. ㅇ Authentication Provider의 역할 사용자가 제공한 인증정보를 기반으로 사용자의 인증을 수행하는 역할을 함. 인증정보가 유효한지 검증하고, 해당 사용자에 대한 인증을 완료하는 과정을 담당함. Authentication 객체를 검사해 해당 사용자가 시스템에 접근할 권한이 있는지 확인하고, 사용자의 상세정보를 로드하고, 인증결과를 새로 Authentication 객체로 생성한다. ㅇ Authentication Provider의 종류 DaoAuthenticationProvider: 가장 기본적인 AuthenticationProvide.. 2024. 3. 29.
spring security를 알아보자 - 7 ㅇ PasswordEncoder의 역할을 알아보자. 데이터베이스에는 비밀번호가 절때로 그냥 문자열로 저장되면 로그에서나, 다른부분에서 유출이 발생할 수 있어서, 절대 그렇게 저장해서는 안된다. DB에 항상 저장할땐 비밀번호를 인코딩해서 저장을 해야한다. Spring security 프레임워크 내에 어디서 비밀번호 검증이 일어날까? DaoAuthenticationProvider에서 실질적인 검증이 일어난다. authenticate() 에서 유저정보를 불러오고, PreAuthenticationCheck에서 만료되었는지 검증하고, additionalAuthenticationChecks() 에서 인증객체를 받고 거기에 입력받은 비밀번호정보를 PsswordEncoder.matches() 로 인코딩한 입력받은 비밀.. 2024. 3. 26.
spring security를 알아보자 - 6 Jpa를 사용해보자. Customer 엔티티와, CustomerRepository를 만들어주자. CustomerRepository는 CrudRepository를 extends한다. @Repository public interface CustomerRepository extends CrudRepository { } 에서 Customer는 어느테이블에 속하는 리포지토리인지, Long은 PrimaryKey의 타입을 적어준것이다. 그리고 레포지토리나 엔티티가 메인 애플리케이션 밖에 존재한다면 @EnableJpaRepositories, @EntityScan를 붙혀준다. 하지만 나는 안에 존재하기때문에 알아서 적용된다. 이제 loadUserByUsername을 사용하기위해 UserDetailsService를 imp.. 2024. 3. 25.
spring security를 알아보자 - 5 UserDetailsManager를 구현하는클래스를 알아보자. ㅇ InMemoryUserDetailsManager public void createUser(UserDetails user) { Assert.isTrue(!this.userExists(user.getUsername()), "user should not exist"); this.users.put(user.getUsername().toLowerCase(), new MutableUser(user)); } public void deleteUser(String username) { this.users.remove(username.toLowerCase()); } public void updateUser(UserDetails user) { Assert.i.. 2024. 3. 21.