看我注释,那个s就是返回的值@Component public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { @Override public int getOrder() { // -1 is response write filter, must be called before that return -2; } @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpResponse originalResponse = exchange.getResponse(); DataBufferFactory bufferFactory = originalResponse.bufferFactory(); ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) { @Override public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { if (body instanceof Flux) { Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body; return super.writeWith(fluxBody.map(dataBuffer -> { // probably should reuse buffers byte[] content = new byte[dataBuffer.readableByteCount()]; dataBuffer.read(content); //释放掉内存 DataBufferUtils.release(dataBuffer); String s = new String(content, Charset.forName("UTF-8")); //TODO,s就是response的值,想修改、查看就随意而为了 byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes(); return bufferFactory.wrap(uppedContent); })); } // if body is not a flux. never got there. return super.writeWith(body); } }; // replace response with decorator return chain.filter(exchange.mutate().response(decoratedResponse).build()); } }
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { /** * * * 1.获取请求信息 * */ Route gatewayUrl = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR); URI uri = gatewayUrl.getUri(); ServerHttpRequest request = (ServerHttpRequest)exchange.getRequest();
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("format", r -> r.path("")
.filters(f -> f.filter(
// 这个lambda最好定义个filter类new一个filter对象或者注入bean
(exchange, chain) -> chain.filter(exchange)
.then(Mono.fromRunnable(() -> {
// 获取到response 可以对响应体进行重写。
ServerHttpResponse response = exchange.getResponse();
})
)
)
).uri("")
)
.build();
}
public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
@Override
public int getOrder() {
// -1 is response write filter, must be called before that
return -2;
} @Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpResponse originalResponse = exchange.getResponse();
DataBufferFactory bufferFactory = originalResponse.bufferFactory();
ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
@Override
public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
if (body instanceof Flux) {
Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
return super.writeWith(fluxBody.map(dataBuffer -> {
// probably should reuse buffers
byte[] content = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(content);
//释放掉内存
DataBufferUtils.release(dataBuffer);
String s = new String(content, Charset.forName("UTF-8"));
//TODO,s就是response的值,想修改、查看就随意而为了
byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes();
return bufferFactory.wrap(uppedContent);
}));
}
// if body is not a flux. never got there.
return super.writeWith(body);
}
};
// replace response with decorator
return chain.filter(exchange.mutate().response(decoratedResponse).build());
}
}
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
/**
*
*
* 1.获取请求信息
*
*/
Route gatewayUrl = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
URI uri = gatewayUrl.getUri();
ServerHttpRequest request = (ServerHttpRequest)exchange.getRequest();
*
*
* 1.获取请求信息
*
*/
Route gatewayUrl = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
URI uri = gatewayUrl.getUri();
ServerHttpRequest request = (ServerHttpRequest)exchange.getRequest();
HttpHeaders header = request.getHeaders();
ServerHttpRequest.Builder mutate = request.mutate(); String rawPath = request.getURI().toString();
String path = request.getPath().value();
String method = request.getMethodValue();
String token = header.getFirst(JwtUtil.HEADER_AUTH);
String instance = uri.getAuthority(); System.out.println("*********************1.请求信息*******************");
System.out.println("RawPath:" + rawPath);
System.out.println("path:" + path);
System.out.println("method:" + method);
System.out.println("token:" + token);
System.out.println("instance:" + instance);
System.out.println("****************************************");