[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 실행