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