230619-230625 WIL

보트·2023년 6월 25일
0

Spring

목록 보기
7/27

Exception

Spring Security 특강

WebSecurityConfig

@EnableWebSecurity : Spring Security 지원 가능하게 함
@Configuration : 설정파일을 만들어 Bean으로 등록하도록 하는 어노테이션
HttpSecurity http(parameter) : Bean으로 등록되어있어 사용할 수 있음
csrf : filter 설정
@Bean(method) : return 값을 Bean으로 등록

UserDetailsServiceImpl

UserDetailsService : 상속받아 살을 붙임, 구현체를 만듦 -> JpaRepository<>와 유사
					
loadUserByUsername : return UserDetails, UserDetailsService interface는 이 메서드 하나만 가지고 있음
authenticate -> retrieveUser로 요청 -> getUserDetailsService().loadUserByUsername() -> formLogin -> UsernameAuthenticationFilter를 기본적으로 사용...

loadUserByUsername은 내부에서 호출해서 사용

UserDetails : interface, 때문에 user -> UserDetails로 만들어줄 구현체를 만들어야 함
@AuthenticationPrincipal UserDetailsImpl userDetails : 붙였던 user 정보에서 getPrincipal() 호출 (Authentication authenticate()에서 createSuccessAuthentication ~~~ mapAuthorities(user.getAuthorities()) 에서 만들어준 user의 권한 정보)
-> 인증정보 뽑아와서 user 정보를 가져올 수 있도록 함

UserDetailsImpl

Authentication

흐름

  1. 인증 설정(WebSecuritConfig.java)
    WebSecurityConfig > http.formLogin() > UsernamePasswordAuthenticationFilter 적용 > Bean으로 등록 > SecurityFilterChain > 요청별 인증 수행

  2. 인증 정보 받아오기 & 인증 객체에 넣기 (UserDetailsServiceImpl.java)
    UsernamePasswordAuthenticationFilter > UserDetailsService 구현 > loadUserByUsername() > User > UserDetails 만들어짐 > Authentication (createSuccessAuthentication() 에서 만들어짐)

  3. 인증정보 구현체 (UserDetailsImpl.java)
    UserDetails 구현체 > UserDetailsImpl

  4. 인증 객체(Authentication)에서 UserDetails 값 받아오기 (@AuthenticationPrincipal)
    Authentication > getPrincipal() > UserDetails 받아와서> User 사용

profile
일주일에 한 번

0개의 댓글