Custom Filter를 이용하여 상황에 맞는 필터를 걸어주었다면 Global Filter 를 이용해서 모든 필터에 적용되는 전역 필터를 생성해 줄 수 있다.
GlobalFilter
class 생성
기존의 Custom Filter를 생성했을때와 동일하게 AbstractGatewayFilterFactory
를 상속받아 구현한다.
@Slf4j
@Component
public class GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Config> {
public GlobalFilter() {
super(Config.class);
}
@Override
public GatewayFilter apply(Config config) {
// Global Pre Filter
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
log.info("Global Filter baseMessage: {}", config.getBaseMessage());
if (config.isPreLogger()) {
log.info("Global Filter Start: request id -> {}", request.getId());
}
// Custom Post Filter
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
if (config.isPostLogger()) {
log.info("Global Filter End: response code -> {}", response.getStatusCode());
}
}));
};
}
@Data
public static class Config {
private String baseMessage;
private boolean preLogger;
private boolean postLogger;
}
}
application.yml
에 Global Filter 등록 및 변수 설정
spring:
application:
name: api-gateway-service
cloud:
gateway:
default-filters:
- name: GlobalFilter
args:
baseMessage: String Cloud Gateway GlobalFilter
preLogger: true
postLogger: true
routes:
- id: first-service
uri: http://localhost:8081/
predicates:
- Path=/first-service/**
filters:
- AddRequestHeader=first-request, first-request-header2
- AddResponseHeader=first-response, first-response-header2
- CustomFilter
- id: second-service
uri: http://localhost:8082/
predicates:
- Path=/second-service/**
filters:
- AddRequestHeader=second-request, second-request-header2
- AddResponseHeader=second-response, second-response-header2
- CustomFilter
default-filters
에 GlobalFilter
를 등록args
에 GlobalFilter.Config
변수를 설정GlobalFilter
테스트
http://localhost:8000/first-service/check
2024-07-11T20:56:23.526+09:00 : Global Filter baseMessage: String Cloud Gateway GlobalFilter
2024-07-11T20:56:23.526+09:00 : Global Filter Start: request id -> 1084042e-4
2024-07-11T20:56:23.528+09:00 : Custom PRE filter: request id -> 1084042e-4
2024-07-11T20:56:23.534+09:00 : Custom POST filter: response code -> 200 OK
2024-07-11T20:56:23.535+09:00 : Global Filter End: response code -> 200 OK
application.yml
의 변수가 제대로 할당된 것을 확인