❗Spring Security 예외처리

yeop·2023년 5월 15일

Spring Security 예외 처리를 위해 일반적으로 사용되는 클래스

1. AuthenticationEntryPoint

  • Authentication
  • 인증되지 않은 사용자가 보호된 리소스에 액세스하려고 할 때 발생하는 예외를 처리하는 클래스입니다. 이 클래스는 401 Unauthorized 오류를 반환하도록 구성되어 있으며, 이 오류는 사용자가 로그인을 해야한다는 메시지를 포함합니다.

2. AccessDeniedHandler

  • Authorization
  • 인증된 사용자가 보호된 리소스에 액세스하지 못할 때 발생하는 예외를 처리하는 클래스입니다. 이 클래스는 403 Forbidden 오류를 반환하도록 구성되어 있으며, 이 오류는 사용자가 해당 리소스에 대한 권한이 없다는 메시지를 포함합니다.

3. AuthenticationExceptionHandler

  • Validate Check
  • JWT 토큰 유효성 검사에서 발생하는 예외를 처리하는 클래스입니다. 이 클래스는 401 Unauthorized 오류를 반환하도록 구성되어 있으며, 이 오류는 JWT 토큰이 유효하지 않다는 메시지를 포함합니다.

Validate Exception 2가지 방법

  1. ValidateToken에서 예외의 터트린다.
  2. ValidateToken에서 reponse에 {exception: ExceptionName} 형태로 담아서 전달한다.
  • 1번 방법이 더 좋은 방법

    • 해당 예외를 빠르게 처리하고 확인하기 위해서
    • 2번 방법은 예외가 발생해도 예외가 발생했음을 알리지 않고, 예외 처리를 하지 않으면 예외가 무시되는 위험성이 있다.
  • ❓가정

    • 인증과정에서 내부적으로 발생하는 에러는 JwtAuthenticationExceptionHandler에서 처리하지만 내가 선언한 ValidateToken에서 발생하는 예측할 수 있는 예외는 AuthenticationException을 Extends한 JwtAuthenticationException으로 발생시킴으로써 JwtAuthenticationEntryPoint에서 처리하도록 한다?
  • 로그 확인 결과

    • 토큰 인증 과정에서 발생하는 에러는 무조건 JwtAuthenticationExceptionHandler에서 처리

AuthErrorResponse를 선언한 이유

  • validateToken에서 발생하는 예외를 AuthenticationException을 Extends한 JwtAuthenticationException로 발생시켰을 때JwtAuthenticationEntryPoint가 예외를 처리하게 된다.
  • 이때 원인이 되는Error를 Response에 담아서 전달하기 위해 Cause가 포함된 AuthErrorResponse를 생성했다. → JwtAuthenticationExceptionHandler의 authException에서 message를 불러와 Message 자체에 담아주기 때문에 원래 목적의 casue가 필요없어졌다. 그래서 Class 정보를 담는 것으로 대체

생각해보니까 이게 원인이 되는 에러메시지를 담기 위해서 validateToken에서 예외를 나눈게 아니다….!!

시큐리티 인증 단에서 터지는 에러는 모두 401, 403 에러로 처리하는 것이 맞고 validateToken에서 예외를 나눈 이유는 validateToken을 컨트롤러 계층에서 사용할 때 예외처리를 하기 위해 나눈 것이다…혼자 상상의 나래 펼쳤네..

아니야 지금 생각해보니까 맞아 JwtAccessDenied, JwtAuthenticationEntryPoint에서는 401, 403으로 처리하고 JwtAuthentcationExceptionHandler에서는 에러 메시지를 받아와서 예외 유형별로 처리해줘. 처음 필터 거칠 때 validateToken에서 터진 에러를 JwtAuthenticationExceptionHandler에서 메시지별로 잡아주기 위해서 나눈 것도 맞고, 컨트롤러 계층에서 사용할 때 예외 처리를 하기 위해 나눈 것이라는 말도 맞는말이고!!

0개의 댓글