首页 / 软件开发 / JAVA / 使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序
使用Acegi保护Java应用程序,第4部分: 保护JSF应用程序2011-09-07 ibm Bilal Siddiqui针对 JavaServer Faces 应用程序的可配置安全性本 系列 的前 3 部分讨论了如何使用 Acegi Security System 保护 Java 企业应用程序:第 1 部分 解释了如何使用 Acegi 的内置过滤器实现一个简单的基于 URL 的安全系统。第 2 部分 展示了如何编写访问控制策略、将其存储在 LDAP 目录服务器中 ,以及配置 Acegi 与 LDAP 服务器交互,从而实现访问控制策略。第 3 部分 展示了如何在企业应用程序中使用 Acegi 保护对 Java 类实例的 访问。第 4 部分将讨论如何使用 Acegi 保护在 servlet 容器中运行的 JavaServer Faces (JSF) 应用程序。本文首先解释 Acegi 针对此目标提供的特 性,并澄清一些关于使用 Acegi 和 JSF 的常见误解。然后提供一个简单的 web.xml 文件,可以用来部署 Acegi,从而保护 JSF 应用程序。然后深入探讨 Acegi 和 JSF 组件,了解在部署 web.xml 文件和用户访问 JSF 应用程序时所 发生的事件。本文最后提供了一个由 Acegi 保护的示例 JSF 应用程序。无需编写 Java 代码即可添加安全性回顾一下本系列的第一个示例 Acegi 应用程序(请参阅 第 1 部分 中的 “ 一个简单 Acegi 应用程序” 一节)。该应用程序使用 Acegi 提供了以下安全 特性:当一个未经验证的用户试图访问受保护的资源时,提供一个登录页面。将授权用户直接重定向到所需的受保护资源。如果用户未被授权访问受保护资源,提供一个访问拒绝页面。回想一下,您无需编写任何 Java 代码就能获得这些特性。只需要对 Acegi 进行配置。同样,在 JSF 应用程序中,无需编写任何 Java 代码,也应该能够 从 Acegi 实现相同的特性。澄清误解其他一些作者似乎认为将 Acegi 与 JSF 集成需要 JSF 应用程序提供登录页 面。这种观点并不正确。在需要时提供登录页面,这是 Acegi 的职责。确保登 录页面在安全会话期间只出现一次,这也是 Acegi 的职责。然后,经过身份验 证和授权的用户可以访问一个受保护资源,无需重复执行登录过程。如果使用 JSF 提供登录页面,将会发生两个主要的问题:当需要时,没有利用 Acegi 的功能提供登录页面。必须编写 Java 代码实现 所有逻辑来提供登录页面。至少需要编写一些 Java 代码将用户凭证(用户名和密码)从 JSF 的登录页 面移交到 Acegi。Acegi 的目的是避免编写 Java 安全代码。如果使用 JSF 提供登录页面,则 没有实现这一用途,并且会引发一系列其他 JSF-Acegi 集成问题,所有这些问 题都源于 “Acegi 是用来提供可配置安全性” 这一事实。如果试图使用 JSF 来完成 Acegi 的工作,将会遇到麻烦。本文余下部分将解释并演示独立于 Acegi 的 JSF 应用程序开发,并在稍后 配置 Acegi 以保护 JSF 应用程序 — 无需编写任何 Java 代码。首先看一下 web.xml 文件,可以部署该文件保护 JSF 应用程序。