24.06.28 00:35 작성
·
97
0
안녕하세요 강사님, 좋은 강의 잘 듣고 있습니다.
따라하던 중 토큰을 잘못 입력했을 경우 403 Forbidden 에러가 발생하는데 이 에러의 경우는 RestControllerAdvice 에서 처리를 할 수 없는건가요??
이 경우에도 Response형태를 통일 시키고 싶은데 어떻게 하면 될까요..?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
토큰 관련 예외처리를 RestControllerAdvice에서 처리하고자 할 때, Spring Boot에서는 @ControllerAdvice
또는 @RestControllerAdvice
를 사용하여 전역적인 예외 처리를 구성할 수 있습니다. 하지만 403 Forbidden 에러 같은 인증 및 인가와 관련된 예외는 Spring Security의 필터 체인에서 발생하기 때문에, 단순히 @RestControllerAdvice
로 처리하기 어려울 수 있습니다.
이러한 예외 상황을 처리하려면 Spring Security의 예외 처리 메커니즘을 사용해야 합니다. 특히, Spring Security에 커스텀 엔트리 포인트를 구현하거나 액세스 거부 핸들러를 정의하여 이러한 상황을 처리할 수 있습니다.
예를 들어, JwtAuthenticationEntryPoint
클래스를 구현하여 인증 실패 시 커스텀 응답을 반환하도록 설정할 수 있습니다.
@Component
public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
// 여기에서 custom response를 설정합니다.
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized");
}
}
또한, WebSecurityConfigurerAdapter
에서 이를 등록해주어야 합니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(jwtAuthenticationEntryPoint)
// 나머지 구성
}
이와 같이 설정하면, Spring Security가 처리하는 인증 예외 상황에서도 커스텀 응답을 반환할 수 있습니다.
이러한 내용은 Spring Security project page와 Spring Boot Reference Documentation에서 보다 자세히 확인할 수 있습니다.