gpt4 book ai didi

java - 安全约束优先于 Servlet 中的过滤器

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:29:29 25 4
gpt4 key购买 nike

在研究 servlet 中的安全约束和过滤器时,我在 web.xml 文件中做了以下声明,但它没有像我预期的那样工作:

<security-constraint>
<web-resource-collection>
<web-resource-name>BeerSelector</web-resource-name>
<url-pattern>/SelectBeer.do</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>


<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>model.MyFilter</filter-class>
</filter>


<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/SelectBeer.do</url-pattern>
</filter-mapping>

根据我的阅读:过滤器应该在请求到达某个 url 之前 遇到,那么,为什么首先调用安全约束?

我知道从安全角度来看这是有意义的(要到达您必须经过身份验证的过滤器),但我想知道请求触发的序列

容器是否首先搜索安全资源从而触发安全约束?

但是这将与下面引用自 Head First Servlets and Jsp 的段落相矛盾”

Remember that in the DD, the is about what happens after the request. In other words, the client has already made the request when the Container starts looking at the elements to decide how to respond. The request data has already been sent over the wire

或者请求可能同时触发:过滤器和安全约束,但安全约束优于过滤器?

最佳答案

容器首先处理安全约束。

简而言之,Servlet 容器首先检查传入的 URL 并检查它是否匹配所谓的排除未检查 约束。 Excluded 表示该 URL 不能被任何人访问,而 unchecked 则相反,允许所有人访问该 URL。

在此阶段,如果您安装了所谓的 JACC 提供程序,则容器可以调用您自己的代码。

在此之后,容器可能会尝试对当前用户进行身份验证,然后它可以再次调用您自己的代码。如果您注册了 SAM (ServerAuthModule),这将始终在此时被调用,如果您没有注册 SAM 或者当您使用非完整的 Java EE 实现 (例如 Java EE Web 配置文件服务器,如TomEE 或像 Tomcat 这样的裸 Servlet 容器) 如果始终调用某种服务器特定的登录模块(很少)或仅在未授权未授权用户访问时才调用(典型),这取决于服务器。 p>

SAM 是一个类似过滤器的东西,因为它可以重定向、转发和包装请求和响应,但它不是 HTTP Servlet 过滤器。

身份验证成功后,您的 JACC 策略将被再次调用,或者当您尚未安装时,容器将使用一种专有机制来查看您现在在身份验证时是否具有访问权限。

如果确实确定你有访问权限,就会调用所谓的“资源”,也就是说容器会调用过滤链中的第一个Filter,最终会调用到被请求的目标Servlet URL 已映射。

您可以在此处阅读有关 SAM 的更多信息:http://arjan-tijms.omnifaces.org/2012/11/implementing-container-authentication.html

更多关于 JACC 供应商的信息:http://arjan-tijms.omnifaces.org/2014/03/implementing-container-authorization-in.html

关于java - 安全约束优先于 Servlet 中的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17654020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com