自从项目使用gateway网关,就与bug纠缠不休息····
先来看看,需求: 网关验证授权,限流,接口数据解密,返回加密等~~~
如果是修改header还好修改,但是修改body里面的内容就麻烦了,查找了全网,没有一个真正解决问题的,都是围绕着怎么DataBuffer与String 的转换,最终没有解决 body长度/缺失问题。
其实gateway官网提供了修改body的过滤器工厂,ModifyRequestBodyGatewayFilterFactory
官方文档;https://cloud.spring.io/spring-cloud-gateway/reference/html/
贴上这个接口源码:
这里源码可以看出:modityRequstBody的方法参数的含义,第一个是入参,第二个是出参(包裹修改后的数据),第三是过滤类型(一般是json即 MediaType.APPLICATION_JSON_UTF8_VALUE)第四个是 修改body 的接口方法(一般默认就行,即匿名实现)
我们可以在构造方法里面做解密,或其他修改即可,然后赋值到message
例如:Helleo(String,message){ this.message = decode(message)}
我的代码:
路由拦截修改:
我这里是String,String 类型全局解密加密过滤,当然其他路由不一定是String 出参,你想怎么写都行。
这里实现了RewriteFunction接口,进行body解密和加密。(只是给出demo,线上的不是这也简单的)
再贴一个简单的: