因此,我们正在运行已在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'下,它们是正确的值(好像未设置)。
有什么想法吗?
提前致谢。
答案 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>