Spring
Spring Cloud Gateway Filter에서 응답 보내기
wadekang
2024. 2. 8. 13:18
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);
}
}