springframework/시작하자SpringSecurity

4.UsernamePasswordAuthenticationFilter

Jungsoomin :) 2020. 9. 19. 01:41

UsernamePasswordAuthenticationFilter?

로그인 처리, 인증기능 해주는 Filter이다.

실질적으로 사용자가 로그인을 하게되면, 인증처리가 이루어지는데 이 요청을 담당하여 인증처리를 하는 Filter가

UsernamePasswordAuthenticationFilter 이다.


흐름과 역할은, 분기점, 결과처리!

내부적으로 각각의 인증처리 역할에 따라 여러개의 클래스를 활용하게된다.

 

  1. 사용자가 인증을 시도

  2. UsernamePasswordAuthenticationFilter가 요청을 받는다.

  3. AntPathRequestMatcher("/login") 가 요청 url이 로그인 url과 매칭되는지 검사한다.

  4. 매칭이 되면 다음단계 , 불일치하면 다른 Filter가 Chain

  5. 일치하면 UsernamePasswordAuthenticationFilterAuthentication 객체를 만들어 username, password 를 저장

  6. UsernamePasswordAuthenticationFilter는 AuthenticationManager 에게 Authentication객체를 주고 인증 작업을 시킴

  7. AuthenticationManagerAuthenticationProvider에게 Authentication 객체를 주어 인증 작업을 위임 / 실질적으로 인증작업을 하는 것은 AuthenticationProvider 이다.

  8. 인증 실패시 AuthenticationProviderAuthenticationException을 발생시키고 리턴, 이후에 UsernamePasswordAuthenticationFilter가 이를 받아 AuthenticationFailureHandler 가 작동한다.

  9. 인증 성공시 AuthenticationProviderAuthentication객체에 User(유저정보) , Authorities(권한정보) 를 담아 리턴

  10. AuthenticationManager는 받은 최종 Authentication 객체를 UsernamePasswordAuthenticationFilter에게 리턴

  11. 최종 Authentication 객체에는 유저정보인 User 객체권한정보인 Authority 객체가 담겨있다.

  12. UsernamePasswordAuthenticationFilterSecurityContext를 생성하여 Authentication객체를 담는다. SecurityContextAuthentication 객체를 담는 보관소의 역할 을 한다.

  13. UsernamePasswordAuthenticationFilterSessionSecurityContext를 담는다.

  14. 이후

    AuthenticationSuccessHandler가 작동하게 되는 것이다.

 


FilterChainProxy?

FilterChainProxy필터들을 관리하는 Bean이다.

이 프록시가 생성되면서 SpringSecurity의 기본적인 필터들이 생겨나는데 , SpringSecurity가 제공하는 API에 연계된 필터들이 있다.

  • 각 필터들은 자신의 역할이 끝나면 다음 순번으로 등록된 필터로 Chain 된다.


첫 순번부터 끝까지 필터들을 거치며 체인되는 것인증(Authentication) 인가(authority) 과정이다.

 

 

FilterChainProxy -> 순번의 모든 필터 Chain 과정 ->인가와 인증 완료 으로 넘어가는 것.

 

오늘 복습은 여기까지 이다.