在没有来自ServletRequest的类型转换的情况下,在doFilter中获取httpservletrequest

时间:2016-07-21 12:12:03

标签: java servlets httprequest servlet-filters multipart

我在我的应用程序中引入了过滤器以进行验证。当我调用doFilter方法时,

public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain)

我无法在getParts()中使用doFilter()getParts()中提供了HttpServletRequest

即使我从ServletRequest输入到HttpServletRequest,我也会获得空值。

问题是,有没有办法在HttpServletRequest内访问doFilter()而没有来自ServletRequest的广播代码?或者我如何直接访问HttpServletRequest内的doFilter()而不将其传递给方法?

在代码段下面,我收到了错误

for(final Part part : ((HttpServletRequest) servletRequest).getParts())

1 个答案:

答案 0 :(得分:0)

在Tomcat中,这是一个已知但已解决的问题。请参阅此错误报告:https://bz.apache.org/bugzilla/show_bug.cgi?id=49711

现在有一个选项(allowCasualMultipartParsing)来配置Tomcat以允许getParts()调用是servlet过滤器(默认为关闭)。请参阅documentation

  

allowCasualMultipartParsing:   如果在调用HttpServletRequest.getPart *或HttpServletRequest.getParameter *时Tomcat应自动解析multipart / form-data请求体,则设置为true,即使目标servlet未使用@MultipartConfig注释进行标记(请参阅Servlet规范3.0,第3.2节)详情)。请注意,除false之外的任何设置都会导致Tomcat以不符合技术规范的方式运行。默认值为false