HttpSecurity
의 폼 로그인 인증 매커니즘을 활성화 하기 위한 api.
HttpSecurity의 formLogin 메소드에서 FormLoginConfigurer
객체 생성
FormLoginConfigurer
생성자에서 UsernamePasswordAuthenticaionFilter
생성
부모 클래스(AbstractAuthenticationFilterConfigurer
) 생성
FormLoginConfigurer
의 authFilter 속성에 UsernameAuthenticaionFilter
할당.
AbstractAuthenticationFilterConfigurer
보면 기본 successHandler를 SaveRequestAwareAuthenticationSuccessHandler
로 할당한 것을 볼 수 있음.
또한 상위 클래스(AbstractAuthenticationConfigurer
)의 필드들에 값을 할당하는 과정도 거침.
이렇게 FormLoginConfigurer
생성
그럼 다시 getOrApply
메소드 살펴보자, 이게 도대체 뭔지 항상 궁금했음.
파라미터(configurer)의 클래스 타입, 여기서는 FormLoginConfigurer
getConfigurer 메소드는 HttpSecurity
의 configurers
속성(LinkedHashMap
)에서 FormLoginConfigurer
를 찾음
아직 추가가 안되어서 null이기 때문에 null 반환
다시 돌아와서 apply 메소드 실행
파라미터 configurer(FormLoginConfigurer
)의 builder 속성에 HttpSecurity
를 세팅하고, HttpSecurity
의 configurers 속성에 FormLoginConfigurer
를 추가함
웃긴건 7버전 이후로 삭제할 메소드라고 표시되어 있음. 그 밑에 똑같은 apply 메소드가 있음. 나중에 이걸 사용하게 되는 것 같음.
SecurityConfigurer
객체들은 init
, configure
메소드를 통해 필터의 초기화를 진행하고, 필터를 SecurityFilterChain
에 넣는다.
FormLoginConfigurer
의 init
은 상위 클래스(AbsatractAuthenticationFilterConfigurer
)의 init
호출
this
는 FromLoginConfigurer
.
loginProsessingUrl이 null 이면 '/login'으로 세팅
failureHandler도 설정 안되어 있으면, 설정.
HttpSecurity
로부터 LogoutConfigurer
찾는데 기본 LogoutConfigurer
면 logoutSuccessUrl에 기본값으로 세팅
FormLoginCongifurer에서 permitAll 설정했으면, 뒤 세 가지 경로는 접근 허용 세팅
HttpSecurity
에 AuthenticationEntryPoint
설정
DefaultLoginPageGeneratinfFilter
를 HttpSecurity
로 부터 가져와서 세팅
cofigure를 실행해서 UsernameAuthenticationFilter
에 필요한 세팅 마무리하고 필터를 HttpSecurity
의 필터 목록에 필터 추가