[Spring Security] 예외 처리
🔐 스프링 시큐리티
🛡️ 예외 처리
ExceptionTranslationFilter는 보안 관련 예외를 적절한 HTTP 응답(401, 403 코드 등)으로 변환하는 역할을 한다.
이 필터는 FilterChainProxy에 포함되어 있으며, AuthenticationException(인증 예외)과 AccessDeniedException(인가 예외)을 처리한다.

ExceptionTranslationFilter는 먼저FilterChain.doFilter(request, response)를 호출하여 애플리케이션의 다른 부분들이 요청을 처리할 수 있도록 한다.- 사용자가 인증되지 않았거나
AuthenticationException(인증 예외)이 발생하면 인증 프로세스를 시작한다.SecurityContextHolder를 비운다. (현재 보안 컨텍스트 초기화)HttpServletRequest를 저장한다. 이는 인증이 성공적으로 완료된 후 원래 요청을 다시 처리할 수 있게 하기 위함이다.AuthenticationEntryPoint를 사용하여 클라이언트에게 인증을 요청한다. 보통 로그인 페이지로 리다이렉트하거나WWW-Authenticate헤더를 보낸다.
- 반면
AccessDeniedException(인가 예외)이 발생하면 접근이 거부된다.AccessDeniedHandler가 호출되어 접근 거부를 처리한다.
AccessDeniedException또는AuthenticationException이 발생하지 않으면,ExceptionTranslationFilter는 아무런 동작을 하지 않는다.
🚪 AuthenticationEntryPoint
AuthenticationEntryPoint는 사용자가 인증되지 않은 상태로 보호된 자원에 접근하려 할 때, 어떤 행동을 취해야 할지를 정의하는 스프링 시큐리티의 구성 요소이다.
마치 경비원과 같이, 허가되지 않은 방문객에게 “잠시만요, 먼저 로그인해주세요.”라고 안내하는 역할을 한다.
일반적으로 클라이언트는 보호된 리소스(자원)에 접근할 때 사용자이름과 비밀번호 같은 인증 정보를 요청과 함께 전송한다. 이 경우 스프링 시큐리티는 추가적인 인증 요청 없이 바로 해당 정보를 처리한다.
만약 클라이언트가 인증 정보 없이 보호된 리소스에 접근을 시도하는 경우 AuthenticationEntryPoint가 개입한다.
AuthenticationEntryPoint의 구현체는 로그인 페이지로 리다이렉트를 수행하거나, WWW-Authenticate 헤더를 포함한 응답을 보내거나, 그 외 다른 조치를 취할 수 있다.
AuthenticationEntryPoint VS AccessDeniedHandler
AuthenticationEntryPoint: 인증되지 않은 상태AccessDeniedHandler: 인증된 상태
참고
Leave a comment