0

我有一个 Java Web 应用程序,它使用安全约束来锁定对资源的访问。当 Ajax 请求需要身份验证时,我试图操纵 HTTP 401 响应,因此我创建了一个过滤器,用于观察响应中的 HTTP 状态并在需要时进行相应的修改。

问题是,似乎如果需要身份验证,过滤器直到 401 被发送到浏览器之后才会被调用。似乎安全约束在请求处理链中的过滤器之前。我的过滤器的 url 模式比任何安全约束都更通用。平台是 WebSphere。

我看不到 Servlet 2.5 规范中指定了安全约束和过滤器的优先级。我错过了什么吗?

4

1 回答 1

1

首先,如果未指定,则表示将其保留为容器的实现细节。
所以你应该WebSphere具体研究一下。
我认为同样的情况也会发生Tomcat,因为安全约束(如果我没记错的话)是通过实现的Valves,因此会在请求链中的应用程序代码之前。
从我的角度来看,这是有道理的,因为如果您将保护分配给您的容器,那么如果请求到达您的过滤器,那么它应该已经通过了您的容器的身份验证机制(我的观点是过滤器是您的资源的一部分)。
在Tomcat中,您可以通过替换来解决您的Filter问题Valve

于 2012-04-27T19:42:38.063 回答