0

所以我们正在运行一个已经在 Tomcat、Glassfish、WebLogic 和 WebSphere 上测试过的 Web 应用程序。除 WebSphere 外,所有都运行正常。问题是没有为某个目录下的文件处理过滤器。

例如,我有一个过滤器可以从浏览器 cookie 中检查用户的语言,另一个可以获取用户的用户名,在 web.xml 中配置如下:

<!-- ****************************** -->
<!-- * Security context filtering * -->
<!-- ****************************** -->

<filter>
    <filter-name>SetSecurityContextFilter</filter-name>
    <filter-class>
        com.test.security.SecurityContextServletFilter
    </filter-class>
</filter>

<!-- ****************************** -->
<!-- ** Locale context filtering ** -->
<!-- ****************************** -->

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

<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> 

两个过滤器都设置了一个静态线程局部变量,可以从静态 getter 访问,但是当同一个文件 'test.jsp' 调用 getter 时,在 ' contextroot /js' 下它们返回默认值(就像未设置一样),而在 ' contextroot /pages' 他们是正确的。

有任何想法吗?

提前致谢。

4

2 回答 2

2

我发现了问题所在!

在我的 web.xml 中,我有这个:

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Test Application</web-resource-name>
            <url-pattern>/pages/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
             ...
        </auth-constraint>
    </security-constraint>

如果我将 URL 模式更改为“/*”,以便上下文根目录下的每个页面都需要登录,那么所有过滤器都会始终正确运行。然而,这确实意味着我的登录页面无权访问任何 css 文件,但这是另一个问题!

干杯。

于 2009-12-10T14:57:53.757 回答
0

将您的登录页面定义为 form-login-page 可能有助于它获取 css 资源,如下所示 <form-login-config> <form-login-page>/Login.jsp</form-login-page>

于 2009-12-14T09:05:52.303 回答