Spring Cloud GateWay 의 Filter 구현 (CustomPreFilter)

CosmoNumb·2024년 8월 4일
0

MSA

목록 보기
5/13

 @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest response = exchange.getRequest();
        logger.info("Pre Filter: Request URI is " + response.getURI());

        // 다른 커스텀 로직 추가 가능

        return chain.filter(exchange);
    }

이 코드는 스프링 클라우드 게이트웨이(Spring Cloud Gateway)에서 필터를 구현하는 코드입니다. 이 필터는 요청을 처리하기 전에 실행되는 프리 필터(pre-filter)로, 주로 로깅이나 인증, 인가 등의 작업을 수행할 때 사용됩니다.


코드 상세

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    ServerHttpRequest request = exchange.getRequest(); // 요청 정보를 가져옴
    logger.info("Pre Filter: Request URI is " + request.getURI()); // 요청 URI를 로그로 기록

    // 여기에 추가적인 커스텀 로직을 추가할 수 있음 (예를 들어, 요청 헤더를 수정하거나, 인증 및 인가 검사를 추가할 수 있습니다.)

    return chain.filter(exchange); // 필터 체인에 현재 요청을 전달하여 다음 필터로 넘어감
}
  1. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain):
    • 이 메서드는 필터의 핵심 부분으로, ServerWebExchangeGatewayFilterChain을 매개변수로 받습니다.
    • ServerWebExchange는 HTTP 요청과 응답을 캡슐화한 객체입니다.
    • GatewayFilterChain은 필터 체인을 나타내며, 다음 필터를 호출하는 데 사용됩니다.
    • 반환 타입이 Mono<Void>인 것은 리액티브 프로그래밍의 일환으로, 비동기 작업을 나타냅니다.

Mono
: Mono는 리액티브 프로그래밍 (데이터를 비동기적으로 처리하고 이벤트 기반으로 반응하는 프로그래밍 방식, 필요할 때 데이터를 가져오고, 데이터가 도착하면 그때 그때 처리함)에서 0 또는 1개의 데이터를 비동기적으로 처리합니다.
Mono<Void>는 아무 데이터도 반환하지 않음을 의미합니다.
반환 타입이 Mono<Void>인 것은 리액티브 프로그래밍의 일환으로, 비동기 작업을 나타냅니다. 이는 작업이 완료되었음을 나타내는 신호로 사용됩니다. 즉, 작업이 완료되면 더 이상 반환할 데이터가 없다는 것을 의미합니다.)

  1. ServerHttpRequest request = exchange.getRequest();:

    • 현재 HTTP 요청을 ServerHttpRequest 객체로 가져옵니다.
  2. logger.info("Pre Filter: Request URI is " + request.getURI());:

    • 현재 요청의 URI를 로그로 기록합니다.
    • 이 로그 메시지를 통해 필터가 요청을 처리하고 있음을 확인할 수 있습니다.
  3. return chain.filter(exchange);:

    • 필터 체인의 다음 필터로 현재 요청을 전달합니다.
    • 필터 체인을 따라 다음 필터들이 순차적으로 실행됩니다.

chain.filter(exchange)는 다음 필터로 요청을 전달합니다.


전체 흐름

  1. HTTP 요청이 게이트웨이에 도달합니다.
  2. filter 메서드가 실행됩니다.
  3. 현재 요청의 URI를 로그로 기록합니다.
  4. 필터 체인의 다음 필터로 요청을 전달하여 계속해서 처리되도록 합니다.

이러한 방식으로 게이트웨이 필터는 요청을 전처리(pre-filtering)하거나 후처리(post-filtering)하여 다양한 기능을 구현할 수 있습니다.

0개의 댓글