- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在研究 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/
在我正在处理的应用程序上,onCreate 使用 startService() 启动一个服务,随后,该 Activity 在其 onStart 中调用 bindService(到同一服务)。问题是服务
这个问题已经有答案了: Problem joining tables where joined table needs to be ordered before grouping (2 个回答) 已关
上下文(虽然不重要),在 netfilter 模块中,我们使用如下结构: struct data { char mac[ETH_ALEN]; char in6_addr addr; }
Google Chrome 的页面性能审核建议将 CSS 导入放在 header 中的 JS 导入之前,以允许并行下载 CSS 和 JS 文件。 但是,我注意到这会导致 Firefox 在导航到另一个
这个问题已经有答案了: Results of printf() and system() are in the wrong order when output is redirected to a f
这个问题已经有答案了: Results of printf() and system() are in the wrong order when output is redirected to a f
我想获得按 project_id 排序的独特帖子基本上,如果有重复的帖子,我想要其中 project_id 的帖子不为空。 有什么办法可以得到这个吗? 此代码返回唯一的帖子,但它们不是按 projec
我是一名优秀的程序员,十分优秀!