spring security는 초기화 진행이 되면 기본적으로 fomLoginAuthentication(폼 로그인 인증)방식과
HttpBasicAuthentication(http 베이직 인증)방식을 설정하고 시작함
인증에 흐름이기 때문에 당연히 인증 예외가 발생할 수 있음
따라서 각각의 인증방식에서 그에 맞는 EntryPoint가 설정되어야함
그래야 어떤 인증방식에 예외가 발생하더라도 그 인증 예외에 대한 특별한 위치나 페이지에 대해서 해당 클라이언트 or 사용자가 액션을 취할 수 있음
AuthenticationEntryPoint는 인증 예외가 발생했을때 의미가 있는 클래스임 (인증 예외가 발생했을시 어떻게 할 것인지를 결정하게 만듬)
AuthenticationEntryPoint의 예외 설정을 관장하는 클래스가 ExceptionHandlingConfigurer클래스임
기본적으로 Spring security 초기화 후 2개의 EntryPoint가 존재함
FormLogin방식에서 인증 예외 발생시 필요한 EntryPoint를 ExceptionHandlingConfigurer가
AuthenticationEntryPoint의 구현체인 LoginUrlAuthenticationEntryPoint 전달받아서 defaultEntryPointMappings 라는 Map객체에 저장
또한 HttpBasic인증방식 예외 발생시 필요한 EntryPoint를 AuthenticationEntryPoint의 구현체인 BasicAuthenticationEntryPoint를 ExceptionHandlingConfigurer가
defaultEntryPointMappings에 추가해줌
이건 아무런 설정없이 사용하는 default값이고 CustomAuthenticationEntryPoint가 존재시
해당 EntryPoint가 가장 우선된다
만일 LoginUrlAuthenticationEntryPoint도 BasicAuthenticationEntryPoint도 CustomAuthenticationEntryPoint도 존재하지 않을시 Http403ForbiddenEntryPoint를 전달
최종적으론 defaultEntryPointMappings에 담겨져 있는 EntryPoint들이 Spring 내부 조건에 의해서 하나가 선택되어 ExceptionTranslationFilter에 전달됨
defaultEntryPoint보다 CustomEntryPoint가 우선적으로 사용된다.
스프링 시큐리티 OAuth2 - Spring Boot 기반으로 개발하는 Spring Security OAuth2(https://www.inflearn.com/course/%EC%A0%95%EC%88%98%EC%9B%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard)