自定义拦截器,order不要修改
/**
* 获取request的内容用
*/
@Component
public class CacheBodyGlobalFilter implements Ordered, GlobalFilter {
/**
* 注入 事件发布类
*/
@Autowired
ApplicationEventPublisher eventPublisher;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Route route = (Route) exchange.getAttributes().get(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
eventPublisher.publishEvent(new EnableBodyCachingEvent(this, route.getId()));
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -2147482649;
}
}
其他拦截器即可获取请求
private String getRequestParam(ServerWebExchange exchange){
String requestBody = "";
HttpMethod method = exchange.getRequest().getMethod();
if(method.matches(HttpMethod.GET.name())){
requestBody = exchange.getRequest().getQueryParams().entrySet().stream().map(entry->{
return String.format("%s : %s",entry.getKey() , String.join(";", entry.getValue()));
}).collect(Collectors.joining("\n"));
}else {
Object dataBuffer = exchange.getAttributes().get("cachedRequestBody");
if(dataBuffer instanceof NettyDataBuffer){
NettyDataBuffer nettyDataBuffer = (NettyDataBuffer)dataBuffer;
requestBody = convertByteBufToString(nettyDataBuffer.getNativeBuffer());
//文件类型去掉文件内容
requestBody = requestBody.replaceAll("Content-Type:[\\s\\S]*?----------------------------", "文件内容被替换");
}
}
return requestBody;
}