我在我的应用程序中引入了过滤器以进行验证。当我调用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())
答案 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