본문 바로가기
Spring

Spring Cloud Gateway Filter에서 응답 보내기

by wadekang 2024. 2. 8.

 

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);
  }
}

댓글