BE전문가 프로젝트

5-1 Authorization(인가) - Jwt 인가 관련 에러 처리 본문

SpringBoot Security

5-1 Authorization(인가) - Jwt 인가 관련 에러 처리

원호보고서 2023. 7. 11. 23:30

JwtError메시지 생성

@Getter
@RequiredArgsConstructor
public enum JwtErrorMessage {
    JWT_TOKEN_IS_VALID("유효한 토큰입니다.")
    , JWT_ACCESS_IS_NOT_VALID("access 토큰이 유효하지 않습니다.")
    , JWT_REFRESH_IS_NOT_VALID("refresh 토큰이 유효하지 않습니다.")
    , JWT_ACCESS_IS_EXPIRED("access 토큰이 만료되었습니다.")
    , JWT_REFRESH_IS_EXPIRED("refresh 토큰이 만료되었습니다. 다시 로그인 해주세요.")
    , JWT_IS_NOT_VALID("토큰이 유효하지 않습니다.")
    , JWT_HEADER_IS_NOT_VALID("헤더가 유효하지 않습니다.")
    , JWT_MEMBER_IS_NOT_FOUND_TOKEN("회원정보가 존재하지 않습니다.")
    , JWT_MEMBER_IS_NOT_FOUND_EMAIL("email이 존재하지 않습니다.")
    ;

    private final String message;
}

 

JwtException 

/**
 * @package     com.example.spring_security.config.security.jwt.exception
 * @class       JwtException
 * @author      최원호
 * @date        2023.06.22
 * @version     1.0
 */
public class JwtException extends AuthorizationServiceException {

    public JwtException(JwtErrorMessage message) {
        super(message.getMessage());
    }
}

인가 관련 에러를 처리하는 메소드이다.

 

AccessDeniedHandlerImpl

/**
 * @package     com.example.spring_security.config.security.jwt.exception
 * @class        AccessDeniedHandlerImpl
 * @author      최원호
 * @date        2023.06.22
 * version      1.0
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class AccessDeniedHandlerImpl implements AccessDeniedHandler {

    private final JwtService jwtService;

    /**
     * @brief   인가 오류시 실행되는 method
     * @param   request
     * @param   response
     * @return  accessDeniedException
     */
    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {

        jwtService.setResponseMessage(false, response, "권한 오류");
    }
}

인가 과정중에 권한 및 오류 시 실행되는 메소드이다.

인가예외가 발생하게 되는 순간 AccessDeniedException에서 예외를 받아 accessDeniedHandler를 호출한이후에 예외를 처리 하게 된다.

Comments