2016-07-21 111 views
0

我在我的应用程序中引入了过滤器进行验证。当我调用doFilter方法,在没有从ServletRequest进行类型转换的情况下在doFilter中获取httpservletrequest

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

我不能doFilter()使用getParts()getParts()可在HttpServletRequest

即使I型从ServletRequest转换为HttpServletRequest,我得到空值。

问题是,有没有什么办法可以访问HttpServletRequest里面的doFilter()而不需要从ServletRequest进行类型转换?或者我怎么能直接访问HttpServletRequest里面doFilter()而不通过它的方法?

下面摘录我得到错误

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

你用什么servlet容器? Tomcat的?哪个版本? – vanje

+0

我正在使用Tomcat 7. – Lokesh

+0

怎么样才不会解决问题?类型转换成功了,所以这不是问题,所以没有理由要避免它。 – EJP

回答

0

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

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

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

相关问题