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

2023-05-16

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 的两个策略:

  • 使用 Acegi 保护 JSF 托管 bean
  • 使用直接由 Acegi 在 JSF 标签中保护的 反转控制(IOC)bean




保护 JSF 托管 bean

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


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


本文转自:IBM developerWorks 中国

请点击此处查看全文




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • RedHat免费订阅账号注册方式

    免费订阅账号来自于开发者账号的免费订阅功能 xff0c 可以阅读基本上所有产品的文章 xff0c 也可以下载官方所更新的最新的补丁包 xff0c 对于有漏洞修复需求来说比较实用 官方站点 xff1a developers redhat co
  • 使用 lvreduce 对逻辑卷做减容缩容操作及注意要点

    1 背景 Linux 系统运维管理过程中 xff0c 有时候会遇到某个逻辑卷所分配的容量较大 xff0c 实际使用量又不多 xff0c 导致剩余较多浪费了 此时如果有其他的逻辑卷需要扩容 xff0c 出于资源利用最大化的考虑 xff0c 会
  • ps aux 进程状态为 I (大写i)

    系统使用 ps aux 查看进程时 xff0c 发现有状态为 I 大写i 的进程 xff0c 暂无发现由于这个状态导致的问题 进程状态 I xff0c 表示task idle xff0c 即空闲的任务 xff08 进程 xff09 xff0
  • android网络框架OkHttp之get请求(源码初识)

    转载请标明出处 xff1a http blog csdn net iamzgx article details 51477877 xff1b 本文出自 iGoach的博客 概括 OkHttp现在很火呀 于是上个星期就一直在学习OkHttp框
  • 学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐

    转载请标明出处 xff1a http blog csdn net iamzgx article details 51607387 本文出自 iGoach的博客 概括 在上一篇博客android网络框架OkHttp之get请求 xff08 源
  • 手动缓存Retrofit+OkHttp响应体,不再局限于Get请求缓存

    转载请标明出处 xff1a http blog csdn net iamzgx article details 51764848 本文出自 iGoach的博客 概括 这篇博客是接着上一篇博客学会Retrofit 43 OkHttp 43 R
  • 哪个才是Android工程构建时的gradle版本?gradle-wrapper.properties还是build.gradle的buildscript说了算?

    先说谜底 xff0c gradle wrapper properties说了算 xff08 1 xff09 build gradle的buildscript里的buildscript dependencies的com android too
  • cocos2d-js之入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 54232599 本文出自 iGoach的博客 cocos2d js xff0c 至今日 xff0c 也马马虎虎算接触了一个星期
  • 微信小程序-入门篇

    转载请标明出处 xff1a http blog csdn net iamzgx article details 72615506 本文出自 iGoach的博客 前言 2017年1月9日 xff0c 微信小程序发布 这也标志着FaceBook
  • 使用OkHttp上传图片

    简介 上传图片是一个APP的常见功能 xff0c 可以是通过OOS上传到阿里云 xff0c 也可以直接上传到Server后台 xff0c OOS有提供相应的SDK xff0c 此处忽略 下面通过OkHttp来实现图片的上传 代码 直接上代码
  • 简单说说如何把json或者txt文件转换为db

    前言 最近在Github上找到一个中国城市的json文件 xff0c 虽然也有db文件 xff0c 但是想通过这个json文件生成自己的数据库表 下面就简单来转换成自己的数据库 准备json 在Github找到一个下面json表 34 sp
  • 2018年7月面试记录

    MRCM 聊天缓存如何实现的聊天重发如何实现如何保持长连接心跳简述TCP协议写一个自己最擅长的设计模式 ZHYT finish会立马销毁activity吗view的生命周期activity结束了HandlerQueue如何处理Handler
  • Android面向AOP之AspectJ的使用篇

    前言 AOP xff0c 它不是一门新语言 xff0c 是一种面向切面的思想 它主要的作用是把一些具有相同属性或者相同功能的代码抽离出来形成一个切面 xff0c 从而实现面向切面编程 xff01 而AspectJ就是基于Java语言实现AO
  • 仿拉勾首页之Behavior的学习

    前言 最近在找工作 xff0c 于是打开拉勾 xff0c 看了看首页 xff0c 交互做的还是不错的 先来看看拉勾效果 然后最终实现的效果 布局是图片直接用 xff0c 所以会失真 实现思路 首先这个是一个MD的效果 xff0c 可以使用自
  • Java中Collections类方法常用合集

    目录 1 Collections sort list 2 Collections reverse list 3 Collections shuffle list 4 Collections swap List list int i int
  • 解决Slf4j日志不打印问题

    日志不打印的问题 xff0c 很让人头疼 xff0c 也是我们经常遇到的问题 日常站点状态巡检时发现有异常日志 xff0c 定位到日志位置 xff0c 看其上线文自定义输出的日志时却发现 xff0c 自己加的日志都没输出 排查了一下初步定位
  • Android Studio 配置Gradle总结

    一 xff0c 问题 xff1a 换个新电脑安装完Android Sutdio第一次打开一个工程巨慢怎么办 xff1f 手动配置Gradle Home为什么总是无效 明明已经下载了Gradle xff0c 配置了gradle home 为什
  • android 指纹识别 之 BiometricPrompt的简单使用教程

    1 使用android api 28的sdk创建一个新的项目 创建完成后 xff0c 在build gradle中查看是否正确 2 在AndroidManifest xml中添加用户权限 lt uses permission android
  • Linux常用命令

    expect except是一种自动交互语言 xff0c 能实现在shell脚本中为scp和ssh等自动输入密码自动登录 span class token comment usr bin expect span span class tok
  • 使用 Acegi 保护 Java 应用程序,第 5 部分: 保护 JSF 应用程序中的 JavaBean

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