오늘 프로젝트를 진행하다가 큰 깨달음을 얻었다. 나는 지금까지 실행 과정이
- 모든 Filter 수행 -> 인증 관리자 -> 인증 공급자 / UserDetailsService / PasswordEncoder
인줄 알았다... 즉, 모든 Filter를 전부 처리한 후 인증 관리자가 실행되는 줄 알았는데 사실은
- 각 Filter 수행 -> 인증 관리자 -> 인증 공급자 / UserDetailsService / PasswordEncoder
이 방식이었다. 즉, 각 Filter를 처리할 때 필요할 경우 인증 관리자를 가져와서 처리하는 것이었다..!
물론 필요 없으면 호출하지 않을 수도 있다.
경우에 따라서는 따로 다른 공급자를 받아 사용하는 필터도 있다.
그리고 인증 관리자와 인증 공급자를 사용하지 않을 수도 있다.
그리고 또 한가지 깨달은 점
AuthenticationProvider를 직접 구현하여 다음과 같이 설정을 해주었는데

직접 Filter를 만들어 주입받아 사용하지 않았는데도 작동하는 것이었다. 이 부분이 상당히 의문이었는데 알고보니 기본으로 등록되어 있는 Filter들이 실행되면서 인증 관리자가 필요한 경우 인증 관리자를 호출하여 사용하는데 이 관리자에서 호출하는 인증 공급자가 여러 개일 경우 인증 공급자의 support() 메서드가 무엇을 반환하는지(e.g. UsernamePasswordAuthenticationToken과 관련된거면 해당 토큰을 처리할 수 있는지 확인)를 보고 인증 관리자가 알맞은 인증 공급자를 불러와서 사용하는 것이었다. 그렇기 때문에 위에서 깨달았던 각 필터마다 인증 관리자가 호출될 수 있다는 점 때문에 내가 만든 인증 공급자가 여러번 자동으로 호출될 수 있는 것이다!

'공부 > Spring Security' 카테고리의 다른 글
| [Spring Security] 로그인 후 로그인 페이지 접속 막기 (0) | 2024.03.24 |
|---|---|
| [Spring Security] JWT Deprecated 해결하기 (0) | 2024.03.18 |
| [Spring Security] CSRF 설정하기 (0) | 2024.01.10 |
| [Spring Security] 원하는 Filter 만들어서 사용하기 (0) | 2024.01.09 |
| [Spring Security] mvcMatchers, antMatchers, regexMatchers 대신 requestMatchers (0) | 2024.01.08 |