web.xml - Java Servlet过滤器 - 在处理JSP页面之前未运行(在Tomcat上)

Ed *_*d . 1 java jsp tomcat web.xml servlet-filters

我是Servlet过滤器的新手,基本上已经使用它们加入了一个项目,并为该web.xml文件添加了一个额外的过滤器(部署在Tomcat 5.5上).

我95%确定它在某些时候它正常工作但现在在调试时如果我在JSP页面的顶部放置断点我试图查看(login.jsp),它是模板页面(page.jsp)并且在两个配置的过滤器doFilter()方法中; 它贯穿整个login.jsp页面(从上到下),然后page.jsp开始处理过滤器.

我需要它首先运行过滤器,因为其中一个确定页面应该显示的语言(检查cookie,数据库设置和浏览器设置),然后应该应用于login.jsp.

有没有人对可能出错的地方有任何建议?

我可以发布很多代码,但我不相信它会有任何用处,因为它只是以错误的顺序工作.

来自web.xml的片段:

<web-app>
...
<filter>
        <filter-name>SetSecurityContextFilter</filter-name>
        <filter-class>
            com.section2.SecurityContextServletFilter
        </filter-class>
    </filter>

<filter>
    <filter-name>SetLocaleFilter</filter-name>
    <filter-class>
        com.section2.locale.LocaleServletFilter
    </filter-class>
</filter>

<filter>
    <filter-name>trinidad</filter-name>
    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
</filter>

<filter>
    <filter-name>ActiveUserFilter</filter-name>
    <filter-class>com.section2.ActiveUserFilter</filter-class>
</filter>

    <filter-mapping>
        <filter-name>trinidad</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

    <filter-mapping>
        <filter-name>SetSecurityContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>SetLocaleFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>ActiveUserFilter</filter-name>
        <url-pattern>/pages/section2/user/*</url-pattern>
    </filter-mapping>

...
</web-app>
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Bal*_*usC 8

Filter代码是如何组织的?你可能先打电话FilterChain#doFilter(),之后才做所需的逻辑吗?

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    // Any code here will be executed BEFORE passing request through JSP/Servlet.
    chain.doFilter(request, response);
    // Any code here will be executed AFTER passing request through JSP/Servlet.
}
Run Code Online (Sandbox Code Playgroud)