我有一个使用安全性约束来锁定对资源访问的Java Web应用程序。当Ajax请求需要身份验证时,我试图操纵HTTP 401响应,因此我创建了一个过滤器,该过滤器观察响应中的HTTP状态,并在需要时进行相应的修改。
问题是,如果需要身份验证,则直到将401发送到浏览器后,过滤器才会被调用。安全约束似乎在请求处理链中的过滤器之前。我的过滤器的url模式比任何安全约束都更通用。平台是WebSphere。
我看不到Servlet 2.5规范在哪里指定了安全约束和过滤器的优先级。我错过了什么吗?
首先,如果未指定,则意味着将其保留为容器的实现细节。 因此,您应该WebSphere专门研究。 我认为也会发生同样的情况Tomcat,因为安全约束(如果我没记错的话)是通过来实现的Valves,因此在请求链中的应用程序代码之前也是如此。 在我看来,这是有道理的,因为如果您将保护分配给容器,那么如果请求到达了过滤器,那么它应该已经通过了容器的身份验证机制(我的观点是,过滤器是资源的一部分)。 在Tomcat中,你会通过更换解决您的问题Filter有Valve
WebSphere
Tomcat
Valves
Filter
Valve