问题
发起multipart/form-data 类型的请求
通过在ZuulFilter 过滤器的run() 方法中使用下面方法:
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String token = request.getParameter("token");
发现无法获取到token ,token 为空。
解决
通过下面代码就可以获取到multipart/form-data 类型的参数。
HttpServletRequestWrapper httpServletRequestWrapper = (HttpServletRequestWrapper) request;
token = httpServletRequestWrapper.getRequest().getParameter("token");
如果上述方式无法解决你的问题,你可以尝试这个 itdragons . 解决Spring Cloud Zuul过滤器获取请求参数为空 . https://blog.csdn.net/itdragons/article/details/81482050 itdragons 的方式多加入了一个OncePerRequestFilter 类型的过滤器,来设置参数,然后通过RequestContext 来获取参数。
解决过程
通在继续DEBUG我发现context.getRequest() 获取到的是Servlet30RequestWrapper
直接通过该包装类,无法获取到multipart/form-data 类型的参数。
Servlet30RequestWrapper 继承自HttpServletRequestWrapper
HttpServletRequestWrapper 中有个一个方法
public HttpServletRequest getRequest(){...}
通过该方法可以获取一个HttpServletRequest ,这个HttpServletRequest 实际上也就是StandardMultipartHttpServletRequest 。
于是便可以通过StandardMultipartHttpServletRequest 获取到请求中的表单参数。
|