快速业务通道

使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
rToBeanProxy,servlet 容器将其 实例化、初始化并注册为一个过滤器。Acegi 现在可以对传入的请求执行身份验 证和授权了。

servlet 容器实例化 faces servlet,后者开始侦听从用户传入的请求。

下一节解释 JSF-Acegi 应用程序收到来自用户的请求时发生的一系列事件。

处理对受 Acegi 保护的 JSF 页面的请求

您已经了解了如何配置 Acegi 保护 JSF 应用程序。也看到了当启动 JSF- Acegi 应用程序时发生的一系列事件。本节描述当用户发送一个对受 Acegi 保 护的 JSF 页面的请求时,JSF 和 Acegi 组件如何在 servlet 容器的框架中运 行。

图 2 展示了当客户机发送一个对受 Acegi 保护的 JSF 页面的请求时,发生 的事件顺序:

图 2. JSF 和 Acegi 协作提供 JSF 页面

使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序(6)

时间:2011-09-07 ibm Bilal Siddiqui

详细来讲,图 2 展示的事件顺序如下所示:

servlet 容器创建一个表示用户请求的 servlet 请求对象。

回想一下 启动 JSF-Acegi 应用程序 小节中的第 3 步,JSF 的 ConfigureListener 实现 ServletRequestListener 接口。这意味着 ConfigureListener 侦听与创建和删除 servlet 请求对象相关的事件。因此, servlet 容器调用 ConfigureListener 类的 requestInitialized() 方法。

requestInitialized() 方法准备执行请求的 JSF 生命周期。准备过程包括 检查请求的 faces 上下文是否存在。faces 上下文封装与应用程序资源相关的 信息。faces servlet 执行 JSF 生命周期时需要这些信息。如果此请求是新会 话的第一个请求,就会缺少 faces 上下文。在这种情况下, requestInitialized() 方法创建一个新的 faces 上下文。

servlet 容器检查用户的请求是否带有任何状态信息。如果 servlet 容器未 找到状态信息,它会假设该请求是新会话的第一个请求,并为用户创建一个 HTTP 会话对象。如果 servlet 容器发现该请求包含某种状态信息(比如一个 cookie 或 URL 中的某种状态信息),它就会根据保存的会话信息恢复用户以前 的会话。

servlet 容器把请求 URL 与一个 URL 模式进行匹配,这个 URL 模式包含在 配置描述符中的 <filter-mapping> 标记的 <url-pattern> 子标 记中。如果请求 URL 与这个 URL 模式匹配,servlet 容器调用 Acegi 的 FilterToBeanProxy,FilterToBeanProxy 已在 图 1 的第 9 步中被注册为一个 servlet 过滤器。

Acegi 的 FilterToBeanProxy 使用 FilterChainProxy 类执行 Acegi 的完 整的安全过滤器链。Acegi 的过滤器自动检查第 4 步中创建的 HTTP 会话对象 ,以查看请求客户机是否已被验证。如果 Acegi 发现用户未被验证,它提供一 个登录页面。否则,它就直接执行 第 2 部分 的 “配置拦截器” 一节中描述 的授权过程。

Acegi 使用经过验证的用户的会话信息更新 servlet 上下文。

servlet 容器通知 JSF 的 ConfigureListener 的 attributeReplaced() 方 法,servlet 上下文已被更新。ConfigureListener 检查是否有任何 JSF bean 被更改。如果发现任何更改,它相应地更新 faces 上下文。但是,在本例中, 在身份验证过程中 Acegi 没有更改任何 JSF 托管 bean,因此在此调用期间 ConfigureListener 不进行任何处理。

如果授权过程成功,控制权被转移到 faces servlet,它执行 JSF 生命周期 并向用户发回一个响应。

现在,您了解了 JSF 和 Acegi 如何协作提供 JSF 请求,接下来看一下完成 后的 JSF 和 Acegi。

示例 JSF-Acegi 应用程序

本文的下载部分(参见 下载)包含一个示例 JSF-Acegi 应用程序 JSFAcegiSample,演示了 Acegi 与 JSF 的简单集成。示例应用程序使用 清单 1 中的 web.xml。

要部署示例应用程序,执行

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号