🐣문제상황
스프링 프로젝트에서
에러를 커스텀하다가 401, 403에러는 커스텀한대로 나오지 않는 것을 발견했다.
난 요기에 넣어서 나오게 하고싶었고,
다른 에러는 요런식으로 잘 나오는데
그치만 401 에러는 이렇게만 나왔다
🐣원인
Spring Security에서 발생하는 예외는 Spring MVC의 기본 예외 처리와 별도로 처리하기 때문!
401 Unauthorized 응답은 기본적으로 Spring Security의 AuthenticationEntryPoint에서 처리된다.
이 처리 방식은@RestControllerAdvice, @ExceptionHandler를 통해 설정해줬던 Spring MVC의 예외 처리 흐름과 다르다!!
Spring Security의 요청 처리 단계는 MVC 요청 처리 흐름보다 앞서 있는데,
보안 관련 작업 의 특성상 요청의 인증 및 권한 처리가 컨트롤러에 도달하기 전에 이루어져야 하기 때문이다.
🐣해결 방법
인증(401) 인가(403)용 핸들러를 직접 만들어 security 클래스에 설정해 주어야 한다.
401 Unauthorized - AuthenticationEntryPoint
403 Forbidden - AccessDeniedHandler
이렇게 ErrorResponse 객체에 담아 반환할 수 있게 한 후
Spring Security에 커스텀한 핸들러들을 DI 시킨 후 설정 해주었다.
Security Config
참고로 스프링 3.xx 버전은 저렇게 람다식으로 구현해야 한다..
그럼 이제 커스텀한대로 에러가 잘 나오는것을 확인할 수 있다.
참고
'Spring' 카테고리의 다른 글
[Spring] Filter vs. Interceptor (1) | 2024.11.27 |
---|---|
[Spring] Spring에서의 요청처리 흐름(+Spring Security/MVC의 에러 처리 위치) (0) | 2024.11.26 |
Spring 프로젝트에서 웹소켓 적용하기~!! 2탄 (3) | 2024.06.12 |
Spring 프로젝트에서 웹소켓 적용하기~!! 1탄 (5) | 2024.06.10 |
Google Oauth2 (0) | 2024.04.02 |