使用 Acegi 保护 Java 应用程序,第 4 部分: 保护 JSF 应用程序
2010-03-18 00:00:00 来源:WEB开发网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。
要部署示例应用程序,执行 第 1 部分 的 “部署并运行应用程序” 一节中的两个步骤。还需要从 Sun 的 JSF 站点下载并解压 jsf-1_1_01.zip。将 jsf-1.1.X.zip 中的所有文件复制到 JSFAcegiSample 应用程序的 WEB-INF/lib 文件夹中。
从浏览器访问 http://localhost:8080/JSFAcegiSample,可以调用示例应用程序。JSFAcegiSample 应用程序显示一个索引页面和一个登录页面,索引页面中包含受保护资源的链接。所有受保护页面都是使用 JSF 组件开发的,而 Acegi 提供登录页面并执行身份验证和授权。
结束语
在本文中,了解了如何配置 Acegi 以保护 JSF 应用程序。还详细了解了 JSF 和 Acegi 组件如何在一个 servlet 容器的框架中协作。最后,尝试运行了一个示例 JSF-Acegi 应用程序。
关于实现 JSF 应用程序的 Acegi 安全性,还涉及到更多内容。本系列的下一篇文章将演示如何使用 Acegi 保护对 JSF 的托管 bean 的访问。
本文示例源代码或素材下载
更多精彩
赞助商链接