LeeDaniel 2025. 9. 16. 15:02
package org.springframework.cloud.gateway.filter;

import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

public interface GlobalFilter {

    // ServerWebExchange exchange
    // -HTTP 요청/응답과 관련된 컨텍스트를 담고 있음
    // -요청 헤더, URI, 쿼리 파라미터 등을 읽거나 수정 가능
     
    // GatewayFilterChain chain
    // -필터 체인의 나머지를 실행할 수 있는 객체
    // -chain.filter(exchange)를 호출해야 다음 필터로 제어가 넘어가며
    //    호출하지 않으면 체인이 중단
    
    // Mono<Void>
    // -리액티브 체인에서의 비동기 완료 신호를 의미

    Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}


import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class LoggingGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("Request Path: " + exchange.getRequest().getURI());
        return chain.filter(exchange).then(
            Mono.fromRunnable(() -> {
                System.out.println("Response Status: " + exchange.getResponse().getStatusCode());
            })
        );
    }

    @Override
    public int getOrder() {
        return -1; // 숫자가 낮을수록 먼저 실행
    }
}​

▶️Spring Cloud Gateway 전역 필터를 정의하는 인터페이스
▶️모든 요청/응답에 적용되며, 로깅, 보안, 트래픽 관리 같은 공통 처리 로직에 적합
▶️순서 제어가 가능하며, 리액티브 체인(Mono<Void>) 기반으로 동작
728x90
반응형