스프링 시큐리티 Oauth2 커스텀 Exception 만들기

728x90
@EnableAuthorizationServer
public class OAuthConfig extends AuthorizationServerConfigurerAdapter {
	
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.
        		/* 다른 설정 부분 생략 */
                .exceptionTranslator(authorizationWebResponseExceptionTranslator());

    }

	public WebResponseExceptionTranslator authorizationWebResponseExceptionTranslator() {
        return new DefaultWebResponseExceptionTranslator() {
            @Override
            public ResponseEntity<OAuth2Exception> translate(Exception e) throws Exception {
                ObjectMapper mapper = new ObjectMapper();
                // 로그인 로직 수행중 일어난 예외처리 Exception e 가 map 으로 받고 있으므로 변환
                Map<String, String> err_map = mapper.readValue(e.getMessage(), HashMap.class);
                // 필요한 데이터만으로 새로운 map 생성 
                HashMap<String, Object> responseMap = new HashMap<>();
                responseMap.put("code", err_map.get("code"));
                responseMap.put("status", err_map.get("status"));
                responseMap.put("message", err_map.get("message"));
                HttpStatus status = HttpStatus.valueOf(err_map.get("status"));
                return new ResponseEntity(responseMap, status);
            }
        };
    }
}

 

응답 메세지

{
    "code": "에러 코드",
    "message": "에러 메세지",
    "status": "401"
}

 

반응형