@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); // 필터 체인에 현재 요청을 전달하여 다음 필터로 넘어감
}
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
:ServerWebExchange
와 GatewayFilterChain
을 매개변수로 받습니다.ServerWebExchange
는 HTTP 요청과 응답을 캡슐화한 객체입니다.GatewayFilterChain
은 필터 체인을 나타내며, 다음 필터를 호출하는 데 사용됩니다.Mono<Void>
인 것은 리액티브 프로그래밍의 일환으로, 비동기 작업을 나타냅니다.Mono
: Mono는 리액티브 프로그래밍 (데이터를 비동기적으로 처리하고 이벤트 기반으로 반응하는 프로그래밍 방식, 필요할 때 데이터를 가져오고, 데이터가 도착하면 그때 그때 처리함)에서 0 또는 1개의 데이터를 비동기적으로 처리합니다.
Mono<Void>
는 아무 데이터도 반환하지 않음을 의미합니다.
반환 타입이Mono<Void>
인 것은 리액티브 프로그래밍의 일환으로, 비동기 작업을 나타냅니다. 이는 작업이 완료되었음을 나타내는 신호로 사용됩니다. 즉, 작업이 완료되면 더 이상 반환할 데이터가 없다는 것을 의미합니다.)
ServerHttpRequest request = exchange.getRequest();
:
ServerHttpRequest
객체로 가져옵니다.logger.info("Pre Filter: Request URI is " + request.getURI());
:
return chain.filter(exchange);
:
chain.filter(exchange)는 다음 필터로 요청을 전달합니다.
filter
메서드가 실행됩니다.이러한 방식으로 게이트웨이 필터는 요청을 전처리(pre-filtering)하거나 후처리(post-filtering)하여 다양한 기능을 구현할 수 있습니다.