使用 Acegi 保护 Java 应用程序,第 5 部分: 保护 JSF 应用程序中的 JavaBean

Bilal Siddiqui 在这篇文章中总结了 本系列,演示了如何用 Acegi 在 JSF 应用程序中保护对 JavaBean 的访问。可以使用多种方式配置安全 bean,包括直接在 JSF 标签中使用受 Acegi 保护的反转控制(IOC)bean。

这个 系列 由五部分组成,介绍了 Acegi Security System,并演示了如何使用 Acegi 保护企业级 Java 应用程序。本文是该系列的最后一部分,将继续讨论使用 Acegi 保护 JSF 应用程序。在 第 4 部分 中,我介绍了如何在不编写 Java 代码的情况下使用 Acegi 保护 JSF 页面。我还详细说明了部署 JSF-Acegi 应用程序和用户访问该程序时发生的事件。在本部分中,我将着重介绍在 JSF 应用程序中保护 JavaBean 的技术。

首先展示如何将 第 3 部分 中演示的 bean 安全性概念应用于 JSF 应用程序,其效果不是太理想。然后演示两项新技术,这些新技术特别适合在 JSF 应用程序中保护 JavaBean。最后,总结四点策略,可以让您不用编写任何 Java 代码就能够使用 Acegi 在 JSF 应用程序中保护 bean。

简单的技术

在 JSF 应用程序中使用安全 bean 的最简单方法就是,执行 第 3 部分 的清单 4 中介绍的五个步骤。在第 3 部分中,我从 servlet 上下文中取出了 Spring 框架的 Web 应用程序上下文对象。可以在以后使用 Web 应用程序上下文安全地访问 bean。下面的 清单 1 演示了如何在 JSF 页面中使用 Web 应用程序上下文:


清单 1. 从 servlet 上下文提取 Web 应用程序上下文,并将其用于 JSF 页面
                
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@page import="sample.CatalogBean"%>
<%@page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
<%@page import="org.springframework.web.context.WebApplicationContext" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<html>
<head>
<title>Acegi simple method security application: TEST PAGE</title>
</head>
<body>

<f:view>
<h2>
<h:outputText value="Protected Resource 1:"/>
</h2>
<%
try {
WebApplicationContext webApplicationContext =
WebApplicationContextUtils.getWebApplicationContext(
this.getServletConfig().getServletContext());
CatalogBean privateCatalog = (CatalogBean)
webApplicationContext.getBean("privateCatalog");
String privateData = catalog.getData();
request.setAttribute("privateData", privateData);
}
catch (Exception e) { }
%>

<h3>
<h:outputText value="#{privateData}"/>
</h3>

</f:view>
</body>
</html>

可以看到,清单 1 使用名为 WebApplicationContextUtils 的类提取 Web 应用程序上下文的实例。WebApplicationContextUtils 是 Spring 提供的一个工具类。

在得到 Web 应用程序上下文之后,能够调用它的 getBean() 方法得到在 Acegi 配置文件中配置的任何 bean。然后可以调用该 bean 的 getter 方法,并将 getter 方法返回的数据以参数的形式存储在 servlet 请求对象中。这些步骤允许 清单 1 中的 <outputText> 标签向用户提供数据。

不是最佳方式

清单 1 那样直接管理 bean 数据虽然简单,但并不可取。这个方法违反了 JSF 的模型-视图-控制器(MVC)架构(请参阅 参考资料),MVC 架构要求使用模型 bean 保存应用程序数据。所以最好不要在 JSF 应用程序中使用这种策略,除非在非常简单的情况下。

Bean 依赖关系

Spring 的 IOC 框架通过表示 bean 之间的依赖关系,提供了一种管理模型 bean 的有用方式。我在 第 1 部分的 “架构和组件” 小节解释了 IOC 中的 bean 依赖关系概念。

JSF 提供了管理应用程序模型 bean 的丰富功能。这类 bean — 称为托管 bean — 被应用于大多数 JSF 应用程序,所以大多数实际的 JSF 应用程序都需要保护托管 bean。

本文余下部分将讨论在 JSF 应用程序中使用安全 bean 的两个策略:





保护 JSF 托管 bean

请看 清单 2 所示的 JSF 页面,其中使用了一个名为 catalog 的 JSF 托管 bean:


清单 2. 使用托管 bean 的简单 JSF 页面


本文转自:IBM developerWorks 中国

请点击此处查看全文




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值