首页 > 代码库 > chain.doFilter(req, resp)
chain.doFilter(req, resp)
web中的Filiter过滤器:
当req不改变时,filiter在web中的配置和顺序没有关系;
但当在filiter中将其改变类型时,会导致其改变的request类型包装层次过多,无法获取其中的参数;
例:http://www.cnblogs.com/springlight/p/6208908.html
上例中在下面代码中改变了request类型
MultipartHttpServletRequest multiReq = multipartResolver.resolveMultipart(httpReq);
而在web.xml中,改变request类型的过滤器之后,还有另一个过滤器,使得request重新包装,多层嵌套其中
<filter-mapping> <filter-name>requestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>XssSqlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这就导致多次的包装
chain.doFilter(req, resp);
在controller层就无法按照原有的方式去获取参数值,如下:
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; if(WebUtil.isEmpty((CommonsMultipartFile) multipartRequest.getFile("file"))){//此处无法获取文件 json.put("message", "没有文件"); return json.toString(); }
解决方案:
调转web.xml中过滤器的申明顺序即可,如下:
<filter-mapping> <filter-name>XssSqlFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>requestFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
感想:
此时得到正确的结果,激动的不能自已。
chain.doFilter(req, resp)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。