Spring security
스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 필터 : UsernamePasswordAuthenticationFilter
sami355
2023. 6. 24. 21:33
스프링 시큐리티 기본 API 및 Filter 이해 - Form Login 인증 필터 : UsernamePasswordAuthenticationFilter
인프런 정수원님의 “스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security"를 보고 작성한 글입니다.
로그인 폼을 통해서 요청일 들어왔을때 인증과 인가가 어떻게 동작하는지 설명합니다.
UsernamePasswordAuthenticationFilter
라는 필터가 수행됩니다. 이후AntPathRequestMatcher(/login)
를 수행하며 인자로 들어오는 경로가 맞는지 확인합니다.- 만약 아니라면 다음 필터로 넘어갑니다.
- 스프링 3부터는
requestMatchers
가 그 역할을 수행합니다.
- 로그인 폼으로부터 username이랑 Password가 들어온것을 추출합니다.
- 이를
AuthenticationManager
에게 인증을 요청하며AuthenticationProvider
에게 사용자 인증을 위임합니다.- 만약 인증에 실패하면 AuthenticationException을 발생시키며 필터의 처음으로 돌아갑니다.
- 인증성공시 User와 인증된 정보를
SecurityContext
에 저장합니다. 이때 session에도 같이 저장됩니다. SuccessHandler
를 호출하며 수행합니다.
추가
AuthenticationFilter
에서AntPathRequestMatcher(/login) deprecated
requestMatchers(/login)
으로 요청 url에 대한 판단을 하고 만약 url이 올바를 경우Authentication
객체를 만들고 요청에 담겨져 온 Usename과 Password를 추출해서 객체에 넣어준다. 이후 이 객체를AuthenticationManager
에 건네준다.- 실질적으로 인증을 하는 것은
AuthenticationProvider
이다. - 만약
AuthenticationProvider
가 인증에 성공하면Authentication
객체를 새로 생성하고 유저에 대한 정보 (Username + Password, 인증정보)를 만들어서AuthenticationManager
에게 return 한다. AuthenticationManager
는 반환받은Authentication
객체를AuthenticationFilter
에 반환한다.- 이후 필터는
AuthenticationFilter
는 전달받은 Authentication 객체를Security Context
에 저장한다.