【问题标题】:Get httpservletrequest in doFilter without type casting from ServletRequest [duplicate]在 doFilter 中获取 httpservletrequest 而无需从 ServletRequest 进行类型转换 [重复]
【发布时间】:2016-11-25 00:43:29
【问题描述】:

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

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

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

即使我从ServletRequestHttpServletRequest 键入转换,我得到的值为空值。

问题是,有没有任何方法可以访问doFilter() 内部的HttpServletRequest 而无需从ServletRequest 进行类型转换?或者我怎样才能直接访问doFilter()内部的HttpServletRequest而不将其传递给方法?

在 sn-p 下面我得到错误

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

【问题讨论】:

  • 您使用什么 servlet 容器?雄猫?哪个版本?
  • 我使用的是 Tomcat 7。
  • 不用类型转换如何解决问题?类型转换成功了,所以这不是问题,所以没有理由要避免它。

标签: java servlets httprequest servlet-filters multipart


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多