요즘 시험기간이라 너무 시간이 없어서 빠르게 핵심만 작성하고 끝내겠다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity security) throws Exception {
return security
//생략
//configuration
.cors().and()
.exceptionHandling(cofig -> cofig
.authenticationEntryPoint()
.accessDeniedHandler()
)
자 파도파도 계속 나오는 spring security 공부거리이다.
저 exceptionHandling이란 무엇일가?
기존에는 어렴풋이 authenticationEntryPoint을 통해서 인증이 안된 사용자를 처리하는 정도로 알고 있었다. 인증이 안되었을 때 401을 보내준다거나 하는 일들 말이다.
하지만 코딩을 하다 보니, accessDeniedHandler가 보였다.
의문점이 생겼다. 그러면 authenticationEntryPoint랑 무슨 차이인가?
자 이번 글의 내용 두개는 무슨 차이인가?
AccessDeniedHandler는 서버에 요청을 할 때 액세스가 가능한지 권한을 체크후 액세스 할 수 없는 요청을 했을시 동작된다.
AuthenticationEntryPoint는 인증이 되지않은 유저가 요청을 했을때 동작된다.
즉 AccessDeniedHandler는 권한 체크를 통과하지 못하였을 때 발생한다. 그러니까 자신이 인증이 되어있던 인증이 안되어있던(ROLE_ANNONYMOUS) 요청이 권한이 없을 때 호출된다.
AuthenticationEntryPoint는 Authentication 을 시도하고, 인증 되지 않았을 때(Principal#isAuthenticated) 실행된다.