Gateway Filter에서 인증 등이 실패했을 때, 에러 코드와 메세지를 응답하려고 하는 경우
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// ... 로직
if (error) { // 인증 실패 등의 에러가 발생했을 경우
return sendUnauthorizedResponse(exchange);
}
// 정상 진행
return chain.filter(exchange);
}
private Mono<Void> sendUnauthorizedResponse(ServerWebExchange exchange) {
// Map을 byte array로 변환하기 위해 선언, 다른 유틸 함수를 사용해도 됨
ObjectMapper om = new ObjectMapper();
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
// JSON 응답을 보낼 경우
response.getHeaders().add("Content-Type", "application/json");
Map<String, String> body = Map.of("message", "Unauthorized", "code", "401", "success", "false");
try {
DataBuffer buffer = response.bufferFactory().wrap(om.writeValueAsBytes(body));
return response.writeWith(Mono.just(buffer));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
'Spring' 카테고리의 다른 글
Spring Cloud Gateway CustomGlobalExceptionHandler 구현 (0) | 2024.02.14 |
---|---|
Spring Boot spring-security-oauth2-jose 사용해 JWKS URI로 JWT 검증하기 (0) | 2024.02.08 |
Spring Cloud Gateway 구현 정리 (1) | 2024.02.06 |
Java Spring JWT 생성 및 검증 로직 구현 (0) | 2024.01.11 |
Java Spring에서 JWKS(JSON Web Key Set) API 구현 (1) | 2024.01.11 |
댓글