使用spring-cloud-gateway GlobalFilter做访问控制拦截出现以下问题,做一个记录。
在使用gateway 做路由拦截的时候发现有路由转发到微服务的时候发现前台post提交的数据在微服务中异常(格式转化出差),后经过查找资料找到解决方法,见 SpringCloud-gateway全局GlobalFilter获取post的请求参数
同时(见图)添加表头设置
设置代码如下
@Override
public HttpHeaders getHeaders() {
HttpHeaders headers = exchange.getRequest().getHeaders();
long contentLength = headers.getContentLength();
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.putAll(super.getHeaders());
if (contentLength > 0) {
httpHeaders.setContentLength(contentLength);
} else {
httpHeaders.set(HttpHeaders.TRANSFER_ENCODING, "chunked");
}
return httpHeaders;
}
但是在上传文件的时候发现,GlobalFilter 这里处理成功执行chain.filter(exchange)
后对应的文件处理微服务一直没有相应,经过一番问题查找,
忽然看到一篇说Undertow 与 Tomcat 的文章,见使用Spring Cloud Gateway填过的坑
一看,我去,项目里面有的是Undertow
在把Undertow注释,tomcat启用后 ,将 filter 里面的post提交数据处理代码删掉(就是【SpringCloud-gateway全局GlobalFilter获取post的请求参数】中设置的post数据处理代码),后功能正常了!!!
文件可以正常上传、post也正常转发了, (▽)
说到底就是没有好好了解过Spring Cloud Gateway采用了自家新推出的Web框架WebFlux。由于WebFlux底层是采用Reactive Netty的NIO框架,所以无论在网络编程方面与传统的WebMvc都有所不同,虽然WebFlux可以完全兼容旧的WebMvc写法,但这并不代表我们的代码可以完全迁移没有任何问题。
又成长一点,(*^▽^*)
网友评论