springcloud中网关拦截请求,更改Post请求参数【ServerWebExchange修改请求参数】
由于某项目大部分使用map传参,导致需要在网关gateway中拦截请求参数,进行Base64解密后放行,网上大部分都无法正确获取值
话不多说直接上代码,放个能用的
@Component
@Order(0)
public class BodyFilter implements GlobalFilter {
@Resource
private ModifyRequestBodyGatewayFilterFactory factory;
@Value(value = "${filter.nonurl}")
private String nonUrl;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
return factory.apply(new ModifyRequestBodyGatewayFilterFactory.Config()
.setRewriteFunction(String.class, String.class, (_exchange, body) -> {
try {
// 进行参数修改
String paramBody = new String(Base64.getDecoder().decode(body), StandardCharsets.UTF_8);
return Mono.just(paramBody);
} catch (Exception ex) {
log.error("前端Base64转换失败,失败url为:{} 参数为:{} 具体异常为:{}", exchange.getRequest().getURI(), body, ex);
return Mono.just(body);
}
}))
.filter(exchange, chain);
}
}