使用Acegi保护Java应用程序,第1部分: 架构概览和安全过滤器 - 编程入门网
其值定义了这些 URL 的角色。/protected/* URL 的 角色是 ROLE_HEAD_OF_ENGINEERING。您可以根据应用程序的需要定义任何角色 。
回想一下 清单 6,您为用户名 alice 定义了 ROLE_HEAD_OF_ENGINEERING。 这就是说 alice 将能够访问 /protected/* URL。 过滤器工作原理 正如您已经了解到的一样,Acegi 的组件彼此依赖,从而对您的应用程序进 行保护。在本文后面的部分,您将看到如何对 Acegi 进行配置,从而按照特定 的顺序应用安全过滤器,因此需要创建过滤器链。出于这个目的, Acegi 保存了一个过滤器链对象,它封装了为保护应用程序而配置了的所有过滤 器。图 1 展示了 Acegi 过滤器链的生命周期,该周期从客户机向您的应用程序 发送 HTTP 请求开始。(图 1 显示了服务于浏览器客户机的容器。) 图 1. 托管 Acegi 过滤器链以安全地为浏览器客户机服务的容器 使用Acegi保护Java应用程序,第1部分: 架构概览和安全过滤器(7)时间:2011-09-07 Bilal Siddiqui下面的步骤描述了过滤器链的生命周期: 浏览器客户机向您的应用程序发送 HTTP 请求。 容器接收到 HTTP 请求并创建一个请求对象,该对象将封装 HTTP 请求中包 含的信息。容器还创建一个各种过滤器都可处理的响应对象,从而为发出请求的 客户机准备好 HTTP 响应。容器然后调用 Acegi 的过滤器链代理,这是一个代 理过滤器。该代理知道应用的过滤器的实际顺序。当容器调用代理时,它将向代 理发送请求、响应以及过滤器链对象。 代理过滤器调用过滤器链中第一个过滤器,向其发送请求、响应和过滤器链 对象。 链中的过滤器逐个执行其处理。一个过滤器可以通过调用过滤器链中下一个 过滤器随时终止自身处理。有的过滤器甚至根本不执行任何处理(比如,如果 APF 发现一个到来的请求没有要求身份验证,它可能会立即终止其处理)。 当身份验证过滤器完成其处理时,这些过滤器将把请求和响应对象发送到应 用程序中配置的拦截过滤器。 ******决定是否对发出请求的客户机进行授权,使它访问所请求的资源。 ******将控制权传输给应用程序(比如,成功进行了身份验证和授权的客户 机请求的 JSP 页面)。 应用程序改写响应对象的内容。 响应对象已经准备好了,容器将响应对象转换为 HTTP 响应,并将响应发送 到发出请求的客户机。 为帮助您进一步理解 Acegi 过滤器,我将详细探讨其中两个过滤器的操作: Session Integration Filter 和 Authentication Processing Filter。 SIF 如何创建一个安全上下文 图 2 展示了 SIF 创建安全上下文所涉及到的步骤: 图 2. SIF 创建安全上下文 使用Acegi保护Java应用程序,第1部分: 架构概览和安全过滤器(8)时间:2011-09-07 Bilal Siddiqui现在详细地考虑下面这些步骤: Acegi 的过滤器链代理调用 SIF 并向其发送请求、响应和过滤器链对象。注 意:通常将 SIF 配置为过滤器链中第一个过滤器。 SIF 检查它是否已经对这个 Web 请求进行过处理。如果是的话,它将不再进 一步进行处理,并将控制权传输给过滤器链中的下一个过滤器(参见下面的第 4 个步骤)。如果 SIF 发现这是第一次对这个 Web 请求调用 SIF,它将设置一个 标记,将在下一次使用该标记,以表示曾经调用过 SIF。 SIF 将检查是否存在一个会话对象,以及它是否包含安全上下文。它从会话 对象中检索安全上下文,并将其放置在名为 security context holder 的临时占位符中。如果不存在会话对象,SIF 将创建一个新的安全 上下文,并将它放到 security context holder 中。注意:security context holder 位于应用程序的范围内,所以可以被其他的安全过滤器访问。 SIF 调用过滤器链中的下一个过滤器。 其他过滤器可以编辑安全上下文。 SIF 在过滤器链完成处理 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |