WEB开发网
开发学院软件开发Java 使用 Acegi 保护 Java 应用程序,第 4 部分: 保护... 阅读

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

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 澄清误解其他一些作者似乎认为将 Acegi 与 JSF 集成需要 JSF 应用程序提供登录页面,这种观点并不正确,使用 Acegi 保护 Java 应用程序,第 4 部分: 保护 JSF 应用程序(2),在需要时提供登录页面,这是 Acegi 的职责,可以部署该文件保护 JSF 应用程序,部署

澄清误解

其他一些作者似乎认为将 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 应用程序。

部署 Acegi 保护 JSF 应用程序

清单 1 展示了一个 web.xml 文件(通常称为部署描述符),可以使用这个文件部署 Acegi,从而保护运行在 servlet 容器(比如 Apache Tomcat)中的 JSF 应用程序:

清单 1. 用于部署 Acegi 和 servlet 容器中的 JSF 的 web.xml 文件

<?xml version="1.0"?> 
<!DOCTYPE web-app PUBLIC 
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
 "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
  <context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/acegi-config.xml</param-value> 
  </context-param> 
 
  <context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
  </context-param> 
 
  <context-param> 
    <param-name>javax.faces.CONFIG_FILES</param-name> 
    <param-value>/WEB-INF/faces-config.xml</param-value> 
  </context-param> 
 
  <listener> 
    <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
    </listener-class> 
  </listener> 
 
  <listener> 
    <listener-class> 
      com.sun.faces.config.ConfigureListener 
    </listener-class> 
  </listener> 
 
  <!-- Faces Servlet --> 
  <servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup> 1 </load-on-startup> 
  </servlet> 
 
  <!-- Faces Servlet Mapping --> 
  <servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>*.faces</url-pattern> 
  </servlet-mapping> 
 
 
  <!-- Acegi filter configuration --> 
  <filter> 
    <filter-name>Acegi Filter Chain Proxy</filter-name> 
    <filter-class> 
      org.acegisecurity.util.FilterToBeanProxy 
    </filter-class> 
    <init-param> 
      <param-name>targetClass</param-name> 
      <param-value> 
        org.acegisecurity.util.FilterChainProxy 
      </param-value> 
    </init-param> 
   </filter> 
 
  <!-- Acegi Filter Mapping --> 
  <filter-mapping> 
    <filter-name>Acegi Filter Chain Proxy</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 
 
</web-app> 

上一页  1 2 3 4 5 6 7  下一页

Tags:使用 Acegi 保护

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接