[Spring] Spring Security Filter
- Spring Security 5.7.1 (Spring Boot 2.7.0)
- Spring Security는 Servlet Container의 Filter를 활용함
- servlet request, response 객체를 각 필터들이 순서대로 접근함
- 여러 Filter들을 Chaining해 순서대로 동작됨
DelegatingFilterProxy, FilterChainProxy, SecurityFilterChain
SecurityFilterChain
에 Security Filter들을 등록함
FilterChainProxy
에 SecurityFilterChain
들을 등록함
DelegatingFilterProxy
가 Servlet Filter로 등록되어 FilterChainProxy
의 필터들을 동작시킴
종류
ExceptionTranslationFilter
- 모든 Security 예외를 감지, 처리하는 필터
AuthenticationException
, AccessDeniedException
두 가지 예외를 발생시킴
AuthenticationException
- 인증 에러
AuthenticationEntryPoint.commence(request, response, authException)
를 호출함 (직접 구현 가능)
- 로그인하게끔 유도하는 것이 기본 동작
requestCache
에 사용자의 요청 정보를 저장해둠
AccessDeniedException
- 인가 에러
AccessDeniedHandler
로 처리
UsernamePasswordAuthenticationFilter
- form 기반 로그인을 지원
- username, password 파라미터로
UsernamePasswordAuthenticationToken
을 생성
AuthenticationManager
객체를 통해 인증을 진행
인증 성공
- 인증정보를 담은
Authentication
객체를 SecurityContext
에 넣음
AuthenticationSuccessHandler
실행
인증 실패
AuthenticationFailureHandler
실행