spring cloud : spring cloud gateway - custom filter, global filter
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package com.example.apigatewayservice.filter;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class CustomFilter extends AbstractGatewayFilterFactory<CustomFilter.Config> {
|
||||
|
||||
public CustomFilter() {
|
||||
super(Config.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GatewayFilter apply(Config config) {
|
||||
// Custom Pre Filter
|
||||
return (exchange, chain) -> {
|
||||
ServerHttpRequest request = exchange.getRequest();
|
||||
ServerHttpResponse response = exchange.getResponse();
|
||||
|
||||
log.info("Custom PRE filter: request id -> {}", request.getId());
|
||||
|
||||
// Custom Post Filter
|
||||
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
|
||||
log.info("Custom POST filter: request code -> {}", response.getStatusCode());
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
public static class Config {
|
||||
// Put the configuration properties
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.example.apigatewayservice.filter;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cloud.gateway.filter.GatewayFilter;
|
||||
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
|
||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
import org.springframework.stereotype.Component;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Config> {
|
||||
|
||||
public GlobalFilter() {
|
||||
super(Config.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GatewayFilter apply(Config config) {
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -14,18 +14,26 @@ spring:
|
||||
|
||||
cloud:
|
||||
gateway:
|
||||
default-filters:
|
||||
- name: GlobalFilter
|
||||
args:
|
||||
baseMessage: Spring Cloud Gateway Global Filter
|
||||
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
|
||||
# - 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
|
||||
# - AddRequestHeader=second-request, second-request-header2
|
||||
# - AddResponseHeader=second-response, second-response-header2
|
||||
- CustomFilter
|
||||
|
||||
@@ -21,4 +21,9 @@ public class FirstServiceController {
|
||||
log.info(header);
|
||||
return "Hello World in First Service.";
|
||||
}
|
||||
|
||||
@GetMapping("/check")
|
||||
public String check() {
|
||||
return "Hi, there. This is a message from first Service.";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,4 +21,9 @@ public class SecondServiceController {
|
||||
log.info(header);
|
||||
return "Hello World in Second Service.";
|
||||
}
|
||||
|
||||
@GetMapping("/check")
|
||||
public String check() {
|
||||
return "Hi, there. This is a message from Second Service.";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user