Java 为什么Servlet过滤器在工作应用程序中导致错误

Java 为什么Servlet过滤器在工作应用程序中导致错误,java,servlets,servlet-filters,Java,Servlets,Servlet Filters,在正常工作的应用程序中,放置了一个Servlet过滤器。但是,此筛选器正在现有应用程序中导致错误 目前,出于概念验证的目的,过滤器只记录日志,没有实现任何代码 没有发现例外情况。 在Tomcat访问日志上,唯一的线索是资源正在返回一个值 [18/Nov/2014:17:18:34 -0500] 10.93.161.0 (0ms) 52D40EF309A3EB46F1C5DE3FB1D063BD.application.1 GET /secure/application/application/s

在正常工作的应用程序中,放置了一个Servlet过滤器。但是,此筛选器正在现有应用程序中导致错误

目前,出于概念验证的目的,过滤器只记录日志,没有实现任何代码

没有发现例外情况。 在Tomcat访问日志上,唯一的线索是资源正在返回一个值

[18/Nov/2014:17:18:34 -0500] 10.93.161.0 (0ms) 52D40EF309A3EB46F1C5DE3FB1D063BD.application.1 GET /secure/application/application/sc/skins/Enterprise/images/Window/window_TL.png HTTP/1.1 : 304
如前所述,在没有过滤器的情况下,应用程序运行良好

当过滤器就位时,日志显示过滤器正在记录日志,但应用程序将无法正常工作,似乎过滤器正在以某种方式进行干扰,我们不希望有任何干扰,除了doFilter方法中实现的代码

...
// request filtered
arg2.doFilter(req, res);
// response filtered
...
下面是web.xml中的过滤器声明

    <filter>
    <filter-name>SessionFilter</filter-name>
    <filter-class>com.company.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
请让我知道任何想法


谢谢

您需要继续筛选链。将其添加到“doFilter”方法的末尾

在的
doFilter()
方法中,您必须在链上链接或转发请求,否则将不会调用其他筛选器,请求也不会转发到
Servlet

从javadoc中获取以下信息:

此方法的典型实现将遵循以下模式:-

  • 检查请求
  • (可选)使用自定义实现包装请求对象,以过滤输入过滤的内容或标题
  • (可选)使用自定义实现包装响应对象,以过滤内容或标题以进行输出过滤
  • a) 或者使用FilterChain对象(chain.doFilter())调用链中的下一个实体
  • b) 不将请求/响应对传递给筛选器链中的下一个实体以阻止请求处理
  • 在调用过滤器链中的下一个实体后,直接在响应上设置头
  • 这样做:

    chain.doFilter(request, response);
    
    过滤器
    系统以这种方式实现的原因是
    过滤器
    可能决定断开链,例如,因为发回错误;或者,
    过滤器
    可以包装请求和/或响应,并且该包装器必须向前借给其他过滤器和servlet


    如果您不调用
    chail.doFilter()
    ,则向Servlet容器表明您不想让其他筛选器和Servlet参与服务请求。

    发布您的筛选器代码。同意@icza。另外,请尝试清除浏览器缓存,然后重试。告诉我们在这种情况下会发生什么。好的,谢谢。过滤代码已发布感谢您的帮助!
    chain.doFilter(request, response);