UsernamePasswordAuthenticationFilter?
로그인 처리, 인증기능 해주는 Filter이다.
실질적으로 사용자가 로그인을 하게되면, 인증처리가 이루어지는데 이 요청을 담당하여 인증처리를 하는 Filter가
UsernamePasswordAuthenticationFilter 이다.
흐름과 역할은, 분기점, 결과처리!
내부적으로 각각의 인증처리 역할에 따라 여러개의 클래스를 활용하게된다.
-
사용자가 인증을 시도
-
UsernamePasswordAuthenticationFilter가 요청을 받는다.
-
AntPathRequestMatcher("/login") 가 요청 url이 로그인 url과 매칭되는지 검사한다.
-
매칭이 되면 다음단계 , 불일치하면 다른 Filter가 Chain
-
일치하면 UsernamePasswordAuthenticationFilter가 Authentication 객체를 만들어 username, password 를 저장
-
UsernamePasswordAuthenticationFilter는 AuthenticationManager 에게 Authentication객체를 주고 인증 작업을 시킴
-
AuthenticationManager는 AuthenticationProvider에게 Authentication 객체를 주어 인증 작업을 위임 / 실질적으로 인증작업을 하는 것은 AuthenticationProvider 이다.
-
인증 실패시 AuthenticationProvider는 AuthenticationException을 발생시키고 리턴, 이후에 UsernamePasswordAuthenticationFilter가 이를 받아 AuthenticationFailureHandler 가 작동한다.
-
인증 성공시 AuthenticationProvider는 Authentication객체에 User(유저정보) , Authorities(권한정보) 를 담아 리턴
-
AuthenticationManager는 받은 최종 Authentication 객체를 UsernamePasswordAuthenticationFilter에게 리턴
-
최종 Authentication 객체에는 유저정보인 User 객체와 권한정보인 Authority 객체가 담겨있다.
-
UsernamePasswordAuthenticationFilter는 SecurityContext를 생성하여 Authentication객체를 담는다. SecurityContext는 Authentication 객체를 담는 보관소의 역할 을 한다.
-
UsernamePasswordAuthenticationFilter는 Session에 SecurityContext를 담는다.
-
이후
AuthenticationSuccessHandler가 작동하게 되는 것이다.
FilterChainProxy?
FilterChainProxy는 필터들을 관리하는 Bean이다.
이 프록시가 생성되면서 SpringSecurity의 기본적인 필터들이 생겨나는데 , SpringSecurity가 제공하는 API에 연계된 필터들이 있다.
-
각 필터들은 자신의 역할이 끝나면 다음 순번으로 등록된 필터로 Chain 된다.
첫 순번부터 끝까지 필터들을 거치며 체인되는 것이 인증(Authentication) 인가(authority) 과정이다.
즉 FilterChainProxy -> 순번의 모든 필터 Chain 과정 ->인가와 인증 완료 으로 넘어가는 것.
오늘 복습은 여기까지 이다.
'springframework > 시작하자SpringSecurity' 카테고리의 다른 글
6.Remember Me 인증 (0) | 2020.09.19 |
---|---|
5.LogoutFilter (0) | 2020.09.19 |
3.Form Login 인증 (0) | 2020.09.19 |
2.사용자 정의 보안 구현 (0) | 2020.09.18 |
1.스프링 시큐리티와 의존성 추가시에 일어나는 일들. (0) | 2020.09.17 |