web.xml - Java Servlet过滤器和WebSphere - URL模式问题

时间:2009-12-10 09:08:21

标签: java websphere web.xml servlet-filters

因此,我们正在运行已在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> 

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

有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分: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文件,但这是另一个问题!

干杯。

答案 1 :(得分:0)

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