spring-cloud-gateway GlobalFilte

2020-06-30  本文已影响0人  zt_sole

使用spring-cloud-gateway GlobalFilter做访问控制拦截出现以下问题,做一个记录。

在使用gateway 做路由拦截的时候发现有路由转发到微服务的时候发现前台post提交的数据在微服务中异常(格式转化出差),后经过查找资料找到解决方法,见 SpringCloud-gateway全局GlobalFilter获取post的请求参数
同时(见图)添加表头设置

image.png
设置代码如下
 @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写法,但这并不代表我们的代码可以完全迁移没有任何问题。

又成长一点,(*^▽^*)

上一篇下一篇

猜你喜欢

热点阅读