Acegi体系结构

合集下载

Acegi安全系统介绍

Acegi安全系统介绍

Acegi安全系统介绍1.1 介绍Acegi是一个能够为基于Spring的应用系统提供描述性安全保护的安全框架。

它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring 对依赖注入和面向切面编程的支持。

当保护Web应用系统时,Acegi使用Servlet过滤器来拦截Servlet请求,以实施身份认证并强制安全性。

并且,在第1.4.1节你将会看到,Acegi采取了一种独特的机制来声明Servlet过滤器,使你可以使用Spring IoC注入它所依赖的其他对象。

Acegi也能够通过保护方法调用在更底层的级别上强制安全性。

使用Spring AOP,Acegi代理对象,将“切面”应用于对象,以确保用户只有在拥有恰当授权时才能调用受保护的方法。

无论你正在保护一个Web应用程序还是需要方法调用级别的安全性,Acegi 都是使用如下图所示的4个主要组件来实施安全性。

Acegi基本安全组件1.1.1 安全拦截器为了释放锁舌并打开门,你必须先把钥匙插到锁孔中,并恰当地拨动锁的制栓。

如果钥匙和锁不匹配,就无法拨动制栓并释放锁舌。

但如果你有正确的钥匙,所有的制栓就会接受这把钥匙,锁舌就会释放,从而允许你把门打开。

在Acegi中,可以认为安全拦截器像一把锁的锁舌,能够阻止对应用系统中受保护资源的访问。

为了释放“锁舌”并通过安全拦截器,你必须向系统提供“钥匙”(通常是一对用户名和密码)。

“钥匙”会尝试拨开安全拦截器的“制栓”,从而允许你访问受保护的资源。

1.1.2 认证管理器第一道必须打开的安全拦截器的制栓是认证管理器。

认证管理器负责决定你是谁。

它是通过考虑你的主体(通常是一个用户名)和你的凭证(通常是一个密码)做到这点的。

你的主体定义了你是谁,你的凭证是确认你身份的证据。

如果你的凭证足以使认证管理器相信你的主体可以标识你的身份,Acegi就能知道它在和谁打交道。

1.1.3 访问决策管理器一旦Acegi决定了你是谁,它就必须决定你是否拥有访问受保护的资源的恰当授权。

基于Acegi授权管理的高可用单点登录系统的研究与设计

基于Acegi授权管理的高可用单点登录系统的研究与设计

i f n e — g r a i n e d a u t h o i r s e d m a n a g e m e n t f o r C A S S S O s y s t e m b a s e d o n B / S( b r o w s e r / s e r v e r )s t r u c t u r e b y i n t e g r a t i n g t h e A c e g i s e c u i r t y f r a m e w o r k
1 Ya I e - C AS工 作 机 制
1 . 1 C AS体 系结构
C A S _ 4 . 5 是Y a l e 大学开发 的一款针对 B / S 架构 的开 源单 点 登 录软件 。由于它使用了 X M L规范并 且可 以在 S e n , l e t 容器中 运行 , 所 以具有很强 的扩展 性。在基 于 B / S架构 的单 点登 录系
ma k e s t h e S S O s y s t e m h a v e n i c e a v a i l a b i l i t y a n d s t a b i l i t y . Ke y wo r d s CAS Ac e g i S S O Av a i l a b i l i t 而服务 器 中的资源 已经受 到 C A S的保
收稿 日期 : 2 0 1 2 — 0 7— 0 3 。上海 市科委 基金项 目( 1 0 D Z 2 2 9 1 8 0 0 , 1 0 D Z 1 1 2 2 6 0 0 ) 。单曙兵 , 助理工程师 , 主研 领域 : 软件 工程。孔磊 , 高工。
统中, C A S的工作过程对于用户来说是透 明的 , 用户通过浏览 器

浅谈Spring框架下Acegi安全架构的应用

浅谈Spring框架下Acegi安全架构的应用
Frme tc niu su d rS rngfa l n lz d a ddic se t or s o dn ouin . a e h q e n e p i r me ae a aye n s u s d wi c re p n ig s lto s h
关键 词 : cg IC S r g A e i o ; pi ; n
摘 要 : 于一个 We 应 用 系统来说 , 对 b 完善 的认证 授权机 制 是十 分重要 的 。本文 就 Sr g 架 下的 A ei 全 架构技 术进 行 了分析 、 讨 , pi 框 n cg安 探 并 给 出了相 应 的解决 方案 。
Ab ta t o b a p iain s se s r c :F rawe p lc to y tm,i rvn h uhe tc to nd a t o zto c a im s v r mp ra t n ti a e ,Ac g ec rt mp o ig t e a t n iain a uh r ain me h ns i ey i otn .I h sp p r i e iS u i y
刘明刚 LuMiga g李德友 L eo ; i n gn ; i yu 李文媛 L n u n D i We y a
( 尔滨金融 学 院 , 哈 哈尔滨 103 ) 500
( ri ia ca Isi t Habn 10 3 C ia) HabnFnn il ntue, r程
浅谈 S r g框架下 A ei pi n cg 安全 架构 的应 用
Dic s i n o t e Ap i a i n fAc g e ur t a s u so n h plc to o e iS c iy Fr me und r Sp i g Fr m e e rn a

Acegi安全系统的配置

Acegi安全系统的配置

Acegi 的配置看起来非常复杂,但事实上在实际项目的安全应用中我们并不需要那么多功能,清楚的了解Acegi配置中各项的功能,有助于我们灵活的运用Acegi于实践中。

2.1 在Web.xml中的配置1) FilterToBeanProxy Acegi通过实现了Filter接口的FilterToBeanProxy提供一种特殊的使用Servlet Filter的方式,它委托Spring中的Bean -- FilterChainProxy来完成过滤功能,这好处是简化了web.xml的配置,并且充分利用了Spring IOC的优势。

FilterChainProxy包含了处理认证过程的filter列表,每个filter都有各自的功能。

<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>2) filter-mapping <filter-mapping>限定了FilterToBeanProxy的URL匹配模式,只有*.do和*.jsp和/j_acegi_security_check 的请求才会受到权限控制,对javascript,css等不限制。

<filter-mapping><filter-name>Acegi Filter Chain Proxy</filter-name><url-pattern>*.do</url-pattern></filter-mapping><filter-mapping><filter-name>Acegi Filter Chain Proxy</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>Acegi Filter Chain Proxy</filter-name><url-pattern>/j_acegi_security_check</url-pattern></filter-mapping>3) HttpSessionEventPublisher <listener>的HttpSessionEventPublisher用于发布HttpSessionApplicationEvents和HttpSessionDestroyedEvent事件给spring的applicationcontext。

基于SSH和Acegi的Web应用框架的设计与实现

基于SSH和Acegi的Web应用框架的设计与实现

基于SSH和Acegi的Web应用框架的设计与实现摘要:随着企业信息化的发展,如何快速开发扩展性好、重用性高、安全性强的Web应用成为中小企业亟待解决的问题。

通过分析应用系统多层次体系结构发展的现状,将符合Java EE规范的第三方流行框架进行分析整合,构建了基于Struts、Spring、Hibernate和Acegi的轻量级Web应用框架,并以药品销售系统为例证说明。

关键词:Java EE; Struts; Spring、Hibernate、Acegi0引言随着Internet技术的迅猛发展,企业面对的信息资源越来越依赖于Web环境。

如何利用成熟的Java EE平台开发出灵活、安全的Web应用系统,已成为研究的热点。

1系统描述药品销售系统分为前台和后台两个子系统。

前台是在线购药子系统,包括会员注册、推荐药品、热门药品、药品检索、购物车、反馈信息、新闻公告、在线购药等功能。

后台是管理子系统,包括药品信息管理、订单管理、会员管理、反馈信息管理、新闻公告管理、角色权限管理、日志管理、用户管理等功能。

系统总功能如图1所示:图1药品销售系统功能结构2系统总体架构设计2.1基于SSH和Acegi的系统架构Java EE平台技术架构的核心思路是采用分层结构,本系统分为表示层、业务逻辑层和数据持久层,并采用SSH架构加以实现:表示层主要由Struts框架实现;Spring框架同Struts框架能够完美的结合,并且在事务管理和依赖注入方面提供了强大的支持,因此用于业务逻辑层;在数据持久层主要采用Hibernate 框架,实现对象关系映射。

同时,使用Acegi安全框架对系统提供认证和访问控制服务。

集成3种框架的方法是利用Struts架构作为系统的整体基础架构,它负责MVC的分离,而在Struts架构的模型部分,利用Hibernate架构来提供持久层支持,业务层由Spring支持。

药品销售系统的总体架构图如图2所示:图2系统总体架构2.2系统架构工作流程在整合多种框架基础上搭建的系统总体架构能完美地工作,具体的工作流程如图3所示:3系统架构分层实现3.1数据持久层的实现在Hibernate中,需建立一个与表对应的PO(持久化对象)和一个将表与PO连接起来的映射文件(*.hbm.xml)。

Acegi框架介绍

Acegi框架介绍

Acegi框架介绍对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的。

Acegi Security(以下简称Acegi)是一个能为基于Spring的企业应用提供强大而灵活安全访问控制解决方案的框架,Acegi 已经成为Spring官方的一个子项目,所以也称为Spring Security。

它通过在Spring容器中配置一组Bean,充分利用Spring的IoC和AOP功能,提供声明式安全访问控制的功能。

虽然,现在Acegi也可以应用到非Spring的应用程序中,但在Spring中使用Acegi是最自然的方式。

Acegi可以实现业务对象方法级的安全访问控制粒度,它提供了以下三方面的应用程序的安全:1 URL资源的访问控制如所有用户(包括其名用户)可以访问index.jsp登录页面,而只有授权的用户可以访问/user/addUser.jsp页面。

Acegi允许通过正则表达式或Ant风格的路径表达式定义URL模式,让授权用户访问某一URL匹配模式下的对应URL资源。

2 业务类方法的访问控制Spring容器中所有Bean的方法都可以被Acegi管理,如所有用户可以调用BbtForum#getRefinedTopicCount()方法,而只有授权用户可以调用BbtForum#addTopic()方法。

3 领域对象的访问控制业务类方法代表一个具体的业务操作,比如更改、删除、审批等,业务类方法访问控制解决了用户是否有调用某种操作的权限,但并未对操作的客体(领域对象)进行控制。

对于我们的论坛应用来说,用户可以调用BbtForum#updateUser(User user)方法更改用户注册信息,但应该仅限于更改自己的用户信息,也即调用BbtForum#updateUser()所操作的User这个领域对象必须是受限的。

Acegi通过多个不同用途的Servlet过滤器对URL资源进行保护,在请求受保护的URL资源前,Acegi的Servlet过滤器判断用户是否有权访问目标资源,授权者被开放访问,而未未被授权者将被阻挡在大门之外。

Acegi 知识点文档

Acegi 知识点文档

中国数码技术研发中心
中国数码技术研发中心
Acegi 主要功能 - 域对象许可
中国数码技术研发中心
Acegi 配置

<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> <filter-mapping> <filter-name>Acegi Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Acegi 概要

用于 Spring 的安全框架 认证和授权机制 耶鲁单点登陆 X509 认证 Channel Security 频道安全管理
中国数码技术研发中心
Acegi 安全控制粒度

URL 资源访问控制
http://apps:8080/index.htm -> for public http://apps:8080/user.htm -> for authorized user

Java Web应用安全框架ACEGI浅释

Java Web应用安全框架ACEGI浅释
关 键 词 : EGI 安 全 ; e AC ; W b应 用
中图分类号 : P l 文献 标识码 : 文章 编号 : 6 22 9 (0 8 0 —0 80 T 39 A 1 7— 6 8 2 0 )40 4 —4 现 在越 来 越 多 的基 于 W e b的 企 业应 用 构 建 在 JE 2 E平 台上 , 于一个企业 级 的应用来说 , 对 安全认 证 和授权机 制是必 不 可 少 的,2 E提 供 的基 于 角 色 的 JE 授权机制通 过使用 声 明和编程技 术 , 给编 程人员 提供 了 比较大 的便利 . 如果 在 开发 过 程 中 , 户 自己写 但 用
AC GI 供 的 安 全 过 滤 器 机 制 , 绍 了把 AC GI 供 的 不 同过 滤 器 组 合 到 S r g框 架 W e E 提 介 E 提 pi n b应 用 中 的 方 法
和步骤 的 同时 , 出了一 种解决 J v b应 用程序安 全 问题 的思路 和方 法。 提 a awe
代码来解 决这些 相关 的问题 , 仅 代码 量 巨 大 , 不 而且 实际 的应 用效果 并不理 想 。AC GI 一个 开源 的安 E 是 全框架 . 为 基 于 S r g的 应用 提 供 了很 好 的安 全 它 pi n
We 用 的安全 问题 主要是 验证用 户身 份 ( u b应 A— te t ain 、 权合 法用 户 访 问不 同 的应 用程 序 功 h ni t )授 c o

> 三
显 示 错 误 页 H t 4 3 误 tp 0 错 (登录 失败 误 t 01 p
(未被 授 权 )
图 1 安 全 的 We b应 用 访 问 流 程 图
收 稿 日期 : 0 8 0 — 9 2 0 — 70

基于Acegi信息安全框架在JavaEE中的研究

基于Acegi信息安全框架在JavaEE中的研究
A ei cg 将检 查 用 户 的 AC ( ecs Co t l i : L A ce nr s 访 s oL t
风格 的路 径 表 达式 定 义 URL模式 . 授 权 用 户访 让
问某 一 U RL匹 配模式 下 的对应 URL资源 。 2业务 类方法 的访 问控 制 . S r g容 器 中所 有 B a pn i en的方 法 都 可 以被 A e c—
从 本 质特 性 上来 说 .e l 过 滤 器就 是最 原 始 Sr e vt 的原 生态 A OP, 以我们 可 以说 A ei 所 cg 不但 对 业务 类方 法 、 域对 象访 问控 制 采用 了 AOP技术 方 案 , 领
用 户访 问权 限范 围 内 的领 域 对 象 剔除 掉 —— 即传
统 的数 据 可视域 范 围的控 制。 一般 来 说 , 用 Acg 使 ei
控 制数 据可 视域 并 非理 想 的选 择 . 反通过 传统 的 相
动态 S QL的解决 方案 往往 更加 简单 易行 。
业务 类方法 代 表一个 具体 的业 务操 作 . 比如 更 改 、 除和 审 批 等 。 务 类方 法 访 问控 制解 决 了 用 删 业
用 户信息 . 即调 用 B to 也 bF mm# p ae e0'操 作 u dt rP Us f i 的 Usr 个领 域对 象必 须 是受 限的 。 e这
A ei cg)是 一个 能 为基 于 S r g的企业 应 用提 供 强 pn i 大 而 灵 活安 全访 问控 制 解 决 方 案 的框 架 。 cg 已 A ei
挡在 大 门之 外 。 A e i 过 S r gAOP对容 器 中 B a cg通 p n i en的受 控
明 式安 全访 问控 制 的功 能 。虽然 , 在 Acg 也可 现 ei

Acegi开发指南

Acegi开发指南

Acegi开发手册Acegi是基于Spring Web应用的安全框架,即是“声明式”的访问安全控制的解决方案,用户基本上不需编写代码而仅通过配置就可以实施应用系统的安全。

Acegi可以实现业务对象方法级的安全访问控制粒度,有以下三方面应用访问安全控制:●URL资源的访问控制●业务类方法的访问控制●领域对象的访问控制同一账号并发数Acegi允许对使用同一用户用户帐号同时登录系统的并发数进行控制,通过这种技术来进行用户许可数的控制。

有些系统由于业务逻辑处理的需要,不允许使用同帐号并发登录。

使用Acegi和Session 并发控制可以完美地解决这一问题。

实施Session并发控制时,需要在web.xml添加一个HttpSessionEventPublisher监听器,这样当新的Session产生时,Acegi就可以得到通知并进行Session并发控制。

HTTPS安全通道传统的HTTP报文传输基于SSL的HTTPS传输协议传统的解决思路是在网站的链接中显式指定目标URL所采用的传输协议,但这种方式不利于开发部署。

Acegi为此提供了声明式的解决方案,用户可以在配置文件中指定哪些URL资源需要使用HTTPS,而哪些不要使用HTTPSAcegi过滤器将据此自动完成传输入协议转换。

安全对象访问控制受保护的资源为“安全对象”,包括URL资源和业务类方法。

安全对象与一般对象的区别是前者通过Acegi的配置属性进行描述。

身份认证管理●基于内存存储用户信息的身份认证●基于数据库存储用户信息的身份认证权限管理器●AbstractSecurityInterceptor中将几个权限管理器组合应用,AuthenticationManager,●AccessDecisionManager,AfterInvocationManager和RunAsManager。

●AuthenticationManager用来对用户请求进行认证工作,默认情况下,我们使用的实现类为NamespaceAuthenticationManager.它内部将包含一个AuthenticationProvider队列,在实际进行校验的时候顺序执行这个队列实现对用户的认证功能。

spring-Acgei续6

spring-Acgei续6

• • • • • •
• • •
传回User Cache中的使用者讯息,如果没有对应的讯息则传回 null。 如果使用者讯息不为null,进行13,如果为null,进行10。 将使用者名称传给User Details Service。 从数据储存(档案、数据库、directory service)中取得使用者 讯息。 将使用者讯息传回。 如果可以取得使用者讯息,其密码与使用者请求中的密码相符, 则将使用者讯息传给Authentication Manager,否则丢出例外。 将使用者讯息传回给Authentication Processing Filter。 将使用者讯息储存在Security Context中。 进行下一个Filter。
• 从Authentication Processing Filter 的运作 流程中,您可以进一步了解 Authentication Manager与Authentication Provider的运作原理,以下是流程运作简 图:
• • • • • • •
前一个Filter将请求、响应与Filter Chain对象传递给下一个 Authentication Processing Filter。 从请求对象中取得使用者名称、密码等信息,用以建立 Authentication Token。 呼叫Authentication Manager,并将Authentication Token传递给它。 Ahthentication Manager选出一个支援Authentication Token的 Authehtication Provider。 将Authentication Token传递给Authentication Provider。 从Authentication Token中取出使用者名称,传给User Cache Service用以检查是否有对应的使用者讯息。 User Cache Service检查是否有对应的使用者讯息。

spring acegi安全框架组件使用——通过一个项目实例详解acegi的使用

spring acegi安全框架组件使用——通过一个项目实例详解acegi的使用

的 主要组 件如何 使用, 如何 配置, 以及 组件的 含义。
关键词: s pr i ng 框架 acegi 安全框架 组件
中图 分类号: TP3 93 . 0 3
文献标识码: A
文 章编号: 1 67 2- 37 91 ( 2 00 8) 09( a) - 0 02 4- 03
1 什么是安全框架 在 we b 开 发 中 , 经常 需 要 进 行 安全 管
信息技术
——通过一个项目实例详解 ac egi 的使用
卢卫 华 ( 上 海大学计 算机学院 上海 2 0 0 4 3 6 ; 上海信 诚通数码 科技有限 公司 上 海 2 0 0 1 3 5 )
摘 要: s pr i ngf r amewor k是目前流行的j 2ee 框架, acegi 是一个基于 s pr i ng的应用系统安全保护框架。文中根据项目实例, 具体说明了ace gi
理, 例如当用户访问某个路径时提示用户 登 陆; 通 过 检 查安 全 标 记, 对用 户 身 份进 行 认证; 将成功的身份验证定向到所请求的 路径上 等等。 这些都是 安全的 。使用 s pr i ng ac e gi ( Ah- s e e - g ee ) 安 全框架 能顺利 的完成 安全的 工作。
管 理器( Ma na ge r ) : a ce gi 使用管 理器实 现 身 份 验 证 处 理 和 注 销 服 务 。同 时 管 理 器 由不同的提供者 提供较低级的安全服务 。
提 供者( Pr o v i de r ) : 提 供者 用于和 不同 类 型的 数 据 存储 服 务 通信 , 例 如 , 关 系数 据 库 。 这 样 用 户 库和 访 问 控 制 可 以 存 储 在 数 据库中。

基于Acegi的通用权限框架的设计与实现

基于Acegi的通用权限框架的设计与实现

基于Acegi的通用权限框架的设计与实现王宇飞【期刊名称】《软件》【年(卷),期】2013(000)007【摘要】User authority management is very important for an enterprise web application. Using some open source frameworks such as Acegi to implement the user authority management will have many advantages. But when we develop enterprise web applications, every application may has different requirements for user authority management. In order to lower the cost of development and let the developers focus on business development, a universal user authority management system which is compatible with several applications is needed. To achieve this goal, Acegi framework should be expanded. This paper introduces some concepts about Acegi, analyses the method to expand Acegi framework in enterprise web applications and implement a universal user authority management which is based on Acegi.%用户权限管理对于企业级WEB应用而言十分重要,使用Acegi这样的开源框架实现用户权限的管理具有简便、灵活等各种优势。

Acegi

Acegi

Acegi简介Acegi Security为Spring Framework提供一个兼容的安全认证服务(security services).最近利用这个做了几个应用,想在接下来的几天里陆续写点下来,如果对大家有帮助,欢迎与我一起讨论,共同进步。

Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。

它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。

因此,Acegi安全系统能够轻松地适用于复杂的安全需求。

安全涉及到两个不同的概念,认证和授权。

前者是关于确认用户是否确实是他们所宣称的身份。

授权则是关于确认用户是否有允许执行一个特定的操作。

Acegi提供两种类型的权限控制,对方法的权限控制和对URL的权限控制。

Acegi简介二,简单配置记录一下最简单的acegi的配置。

首先需要在web.xml中添加一些:<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml,/WEB-IN F/spring-beans.xml,/WEB-INF/applicationContext-security.xml,/WEB-INF/applicationConte xt-aodragon.xml</param-value></context-param>这个是定义spring的上下文,当然对应的还有<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-clas s></listener>然后就是需要定义一些filter,这是acegi运行的定义<filter><filter-name>securityFilter</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><filter-mapping><filter-name>securityFilter</filter-name><url-pattern>/j_security_check</url-pattern></filter-mapping><filter-mapping><filter-name>securityFilter</filter-name><url-pattern>/j_acegi_exit_user</url-pattern></filter-mapping><filter-mapping><filter-name>securityFilter</filter-name><url-pattern>*.html</url-pattern></filter-mapping><filter-mapping><filter-name>securityFilter</filter-name><url-pattern>*.jsp</url-pattern></filter-mapping><filter-mapping><filter-name>securityFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>当然如果你需要在页面中用到acegi的TAG再定义一下<taglib><taglib-uri>/WEB-INF/authz</taglib-uri><taglib-location>/WEB-INF/tld/authz.tld</taglib-location></taglib>到这里,web.xml 里需要特别添加的就这么多了。

Acegi安全框架在Web系统中的应用

Acegi安全框架在Web系统中的应用

\ \
、、 、、
- H _ _ h . _ —— — — — — — — — — —— — — — — — — — — —— — - _ — . _ — — —— — _ — — — — — — — — — —— — — — — — — — — _ _— — — — — — — —— — — — — — — — — — — —- — — — _
管 理 器 、 行 身 份 管 理 器 , 们 之 间 的 关 系 如 图 1 运 它 。

框 架 调 用 访 问决 策 管 理 器 来 实 现 用 户 的 授 权 。 问决 访
策 管理 器 的投票 者根 据用 户具 有 的权限来 对 用户 是
否 用 权 访 问 资 源 进 行 投 票 . c g 框 架 根 据 投 票 结 果 A ei
个 异 常 , 明 验 证 失 败 ; 后 . 果 认 证 成 功 A ei 表 最 如 cg
1 A e i 架 分 析 c g框
1 cg框 架 的 基 本 组 件 . A ei 1
A e i 全框架 主要 有 4个 主要 组件来实 施安全 cg 安 性 。它们 分别是 : 安全拦 截器 、 认证 管理器 、 问决策 访
成 功 .否 则 失 败 。首 先 安 全 拦 截 器 把 获 得 的 A te . uh n t ao i t n对 象 存 在 S c dv otxH le ci eu t net od r中 的 T ra . C hed
Lcl o a 对象 中 : 然后认 证管理 器从 S cry o t t l. e ui C ne Ho t x d e 取 出用户信 息 .认 证 管理器 的具体 实现 者 D o u l " aA .

ACEGI安全框架应用指南

ACEGI安全框架应用指南

ACEGI安全框架应用指南级不: 中级何平系统架构师,独立顾咨询,培训讲师。

2005 年12 月26 日文章来源于一次acegi的项目应用。

因为业务需要与acegi框架缺省的应用方式有一定的区不,故在实际应用过程中尝试了对acegi的一定量的改造工作,从而具有一定的研究和学习价值。

文章中关于Acegi的介绍收入了其他文章中的内容,已在参教资料中列出资料来源。

内容大纲:认识Acegi安全框架安装并运行Acegi自带的范例改造Acegi框架满足我们的业务要求具体内容:认识Acegi安全框架Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。

它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。

因此,Acegi安全系统能够轻松地适用于复杂的安全需求。

安全涉及到两个不同的概念,认证和授权。

前者是关于确认用户是否确实是他们所宣称的身份。

授权则是关于确认用户是否有承诺执行一个特定的操作。

在Acegi安全系统中,需要被认证的用户,系统或代理称为"Principal"。

Acegi安全系统和其他的安全系统不同,它并没有角色和用户组的概念关键组件Acegi安全系统包含以下七个关键的功能组件:l Authentication对象,包含了Principal,Credential和Principal的授权信息。

同时还能够包含关于发起认证要求的客户的其他信息,如IP地址。

2 ContextHolder对象,使用ThreadLocal储存Authentication对象的地点。

3 AuthenticationManager,用于认证ContextHolder中的Authe ntication对象。

4 AccessDecissionManager,用于授权一个特定的操作。

5 RunAsManager,当执行特定的操作时,用于选择性地替换A uthentication对象。

基于Acegi的Web系统安全架构的设计与实现

基于Acegi的Web系统安全架构的设计与实现

( ) 业务 类 的访 问控制 业务 类 即 Jv 2对 aa Ba 或 Ba , en e 可实现业务的逻辑功能 , n 包含增加 、 删除、 查询 用户 等方 法 . 调用 B a 在 en所有 方 法前 , A ei cg 将检查用户 的访 问控制列表 A L A ces C ( ecs C n o Ls , 看其 是否包 含正 要进 行操 作 的 ot l i) 查 r t
文 章 编 号 :10 0 6—42 ( 0 1 o 0 6 0 7 9 2 1 )4— 3 3— 5
基 于 A ei We cg 的 b系统 安 全 架构 的 设 计 与 实 现
周 平, 杜海 舟 , 张 超
( 上海电力学院 计算机与信息工 程学院 ,上海 2 09 ) 0 0 0

要: 分析 了 A e 安全框架 , 了 A e ei g 讨论 c 安全访 问控 制粒 度问题 , 以及认 证与授权 过程 . 通过应 用 Ael cg
拦截 登 陆 请 求 U L 获 取 P nia R , i p r c l和 Ceef rdn M i
制, 而查询方法不受控制. 当用户的请求引发调用 B a 的受 控 方 法 时 , cg 通 过 Sr gA P 对 e n A ei p n O J i
信息 ( 即用户名和密码) . () 2 认证管理器调用 相应 的提供者 验证用 户名密码 A t nctn r es gF t 过滤器调 u etao o sn ie h i i P c i lr
A ei cg认证授权流程包括认证 流程 和授权流程两 部分 .
2 1 认证 流程 .
( ) B a 法 的访 问 控 制 3 对 en方
B a 方 法 访 e n

acegi参考手册

acegi参考手册

acegi参考手册(v1.0.4)[译]-序言关键字: acegi 安全翻译序言Acegi Security为基于J2EE的企业应用软件提供全面的安全解决方案。

正如你在本手册中看到的那样,我们尝试为您提供有用的,高可配置的安全系统。

安全是一个永无止境的目标,获取一个全面的,系统级的实现方式是至关重要的。

在安全界,我们鼓励你采用“分层安全”,这样每个层都确保自身尽可能的安全,另外的层提供另外的安全。

每个层自身越“紧密”,你的系统就越鲁棒和安全。

在底层,你要处理传输入安全和系统认证,减少“中间人攻击”(man-in-the-middle attacks)。

接下来你要使用防火墙,结合VPN或者IP安全来确保只有认证过的系统能够尝试连接。

在企业环境中,你可能部署DMZ(demilitarized zone,隔离区)来把面向公众的服务器和后端的数据和应用服务器分隔开。

在以非授权用户运行进程和文件系统安全最大化上,你的操作系统也将扮演一个关键的角色。

接下来你要防止针对系统的拒绝服务和暴力攻击。

入侵检测系统在检测和应对攻击方面尤其有用,这些系统可以实时屏蔽恶意TCP/IP地址。

在更高层上,你的Java虚拟机需要进行配置,将授予不同Java类型的权限最小化,然后,你的应用程序要对添加针对自身特定问题域的安全配置。

Acegi Security使后者-应用程序安全变得容易。

当然,你要正确对待上述提到的每个安全层,以及包含于每个层的管理因素。

这样的管理因素具体包括:安全公告监测,补丁,人工诊断,审计,变更管理,工程管理系统,数据备份,灾难恢复,性能评测,负载监测,集中日志,应急反应程序等等。

Acegi Security专注于在企业应用安全层为您提供帮助,你将会发现和各式各样的需求和商业问题领域一样多。

银行系统的需求和电子商务应用的需求不同。

电子商务应用和售卖军用自动工具的公司的需求不同。

这些客户化的需求使得应用安全显得有趣,富有挑战性而且物有所值。

Java Web应用安全框架ACEGI浅释

Java Web应用安全框架ACEGI浅释

Java Web应用安全框架ACEGI浅释
孟宪宁
【期刊名称】《青岛职业技术学院学报》
【年(卷),期】2008(21)4
【摘要】对于任何一个完整的应用系统来讲,完善的认证和授权机制是必不可少的.开源的ACEGI为企业级应用中通常会遇到的安全问题提供了很好的解决方案,为使用Spring框架的应用程序提供了丰富的安全服务.在Spring框架下采用ACEGI,可以充分利用Spring框架提供的依赖注入(Dependence Injection)技术,在Web配置文件中完成应用程序的安全配置和管理,具有很高的灵活性.本文在分析了ACEGI 架构模型、ACEGI提供的安全过滤器机制,介绍了把ACEGI提供的不同过滤器组合到Spring框架Web应用中的方法和步骤的同时,提出了一种解决Java Web应用程序安全问题的思路和方法.
【总页数】4页(P48-51)
【作者】孟宪宁
【作者单位】青岛职业技术学院,信息学院,山东,青岛,266555
【正文语种】中文
【中图分类】TP319
【相关文献】
1.Spring Acegi安全框架在Web系统中的应用与扩展 [J], 周文轩
2.基于Spring的Acegi安全框架的集成研究 [J], 刘振海
3.Spring集成Acegi安全框架在J2EE中的应用 [J], 张国平;马丽
4.spring acegi安全框架组件使用——通过一个项目实例详解acegi的使用 [J], 卢卫华
5.基于Acegi信息安全框架在JavaEE中的研究 [J], 徐金鑫
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

概述【IT168 专稿】对于任何一个完整的应用系统,完善的认证和授权机制是必不可少的。

Acegi Security(以下简称Acegi)是一个能为基于Spring的企业应用提供强大而灵活安全访问控制解决方案的框架,Acegi已经成为 Spring 官方的一个子项目,所以也称为Spring Security。

它通过在Spring容器中配置一组Bean,充分利用Spring的IoC和AOP功能,提供声明式安全访问控制的功能。

虽然,现在 Acegi也可以应用到非Spring的应用程序中,但在Spring 中使用Acegi是最自然的方式。

Acegi可以实现业务对象方法级的安全访问控制粒度,它提供了以下三方面的应用程序的安全:? URL资源的访问控制如所有用户(包括其名用户)可以访问index.jsp登录页面,而只有授权的用户可以访问/user/addUser.jsp页面。

Acegi允许通过正则表达式或Ant风格的路径表达式定义URL模式,让授权用户访问某一URL匹配模式下的对应URL资源。

? 业务类方法的访问控制Spring容器中所有Bean的方法都可以被Acegi管理,如所有用户可以调用BbtForum#getRefinedTopicCount()方法,而只有授权用户可以调用BbtForum#addTopic()方法。

? 领域对象的访问控制业务类方法代表一个具体的业务操作,比如更改、删除、审批等,业务类方法访问控制解决了用户是否有调用某种操作的权限,但并未对操作的客体(领域对象)进行控制。

对于我们的论坛应用来说,用户可以调用BbtForum#updateUser(User user)方法更改用户注册信息,但应该仅限于更改自己的用户信息,也即调用BbtForum#updateUser()所操作的User这个领域对象必须是受限的。

Acegi通过多个不同用途的Servlet过滤器对URL资源进行保护,在请求受保护的URL资源前,Acegi的Servlet过滤器判断用户是否有权访问目标资源,授权者被开放访问,而未未被授权者将被阻挡在大门之外。

Acegi通过Spring AOP对容器中Bean的受控方法进行拦截,当用户的请求引发调用Bean的受控方法时,Acegi的方法拦截器开始工作,阻止未授权者的调用。

对领域对象的访问控制建立在对Bean方法保护的基础上,在最终开放目标Bean方法的执行前,Acegi将检查用户的ACL(Aeccess Control List:访问控制列表)是否包含正要进行操作的领域对象,只有领域对象被授权时,用户才可以使用Bean方法对领域对象进行处理。

此外,Acegi还可以对Bean方法返回的结果进行过滤,将一些不在当前用户访问权限范围内的领域对象剔除掉——即传统的数据可视域范围的控制。

一般来说,使用Acegi控制数据可视域未非理想的选择,相反通过传统的动态SQL的解决方案往往更加简单易行。

从本质特性上来说,Servlet过滤器就是最原始的原生态AOP,所以我们可以说Acegi不但对业务类方法、领域对象访问控制采用了AOP技术方案,对URL 资源的访问控制也使用了AOP的技术方案。

使用AOP技术方案的框架是令人振奋的,这意味着,开发者可以在应用程序业务功能开发完毕后,轻松地通过Acegi 给应用程序穿上安全保护的“铁布衫”。

Acegi体系结构乘飞机前需要通过安检,乘客必须提供身份证以验证其身份。

在通过安检进入候机室后,国航、海航、南航等不同航空公司的飞机陆续到达,但你只能登上机票上对应航班的飞机。

在登机后,只能坐在机票对应的座位上——你不能抢占他人的座位,你不能在座位上刻字留念、你不能要求空姐打开机窗……乘飞机的过程最能体现安全控制的流程,我们可以从中找到身份认证、资源访问控制、领域对象安全控制的对应物:安检对应身份认证,登机对应资源访问控制而按号就座则对应领域对象安全控制。

Acegi通过两个组件对象完成以上安全问题的处理:AuthenticationManager(认证管理器)、AccessDecisionManager(访问控制管理器),如图 1所示:图 1 Acegi体系结构SecurityContextHolder是框架级的容器,它保存着和所有用户关联SecurityContext实例,SecurityContext承载着用户(也称认证主体)的身份信息的权限信息, AuthenticationManager、AccessDecisionManager将据此进行安全访问控制。

SecurityContext的认证主体安全信息在一个HTTP请求线程的多个调用之间是共享的(通过ThreadLocal),但它不能在多个请求之间保持共享。

为了解决这个问题,Acegi将认证主体安全信息缓存于HttpSession中,当用户请求一个受限的资源时,Acegi通过 HttpSessionContextIntegrationFilter将认证主体信息从HttpSession中加载到 SecurityContext实例中,认证主体关联的SecurityContext实例保存在Acegi容器级的 SecurityContextHolder里。

当请求结束之后,HttpSessionContextIntegrationFilter执行相反的操作,将SecurityContext中的认证主体安全信息重新转存到HttpSession中,然后从SecurityContextHolder中清除对应的SecurityContext实例。

通过HttpSession转存机制,用户的安全信息就可以在多个HTTP请求间共享,同时保证 SecurityContextHolder中仅保存当前有用的用户安全信息,其整体过程如图 2所示:图 2 SecurityContext在HttpSession和请求线程间的转交过程当用户请求一个受限的资源时,AuthenticationManager首先开始工作,它象一个安检入口,对用户身份进行核查,用户必须提供身份认证的凭证(一般是用户名/密码)。

在进行身份认证时,AuthenticationManager将身份认证的工作委托给多个 AuthenticationProvider。

因为在具体的系统中,用户身份可能存储在不同的用户信息安全系统中(如数据库、CA中心、LDAP服务器),不同用户信息安全系统需要不同的AuthenticationProvider执行诸如用户信息查询、用户身份判断、用户授权信息获取等工作。

只要有一个AuthenticationProvider可以识别用户的身份,AuthenticationManager就通过用户身份认证,并将用户的授权信息放入到SecurityContext中。

当用户通过身份认证后,试图访问某个受限的程序资源时,AccessDecisionManager开始工作。

AccessDecisionManager采用民主决策机制判断用户是否有权访问目标程序资源,它包含了多个AccessDecisionVoter。

在访问决策时每个AccessDecisionVoter都拥有投票权,AccessDecisionManager 统计投票结果,并按照某种决策方式根据这些投票结果决定最终是否向用户开放受限资源的访问。

重要组件类介绍每个框架都有一些核心的概念,这些概念被固化为类和接口,成为框架的重要组件类。

框架的管理类、操作类都在这些组件类的基础上进行操作。

在进入Acegi框架的具体学习前,有必要事先了解一下这些承载Acegi框架重要概念的组件类。

首先,我们要接触是UserDetails接口,它代表一个应用系统的用户,该接口定义了用户安全相关的信息,如用户名/密码,用户是否有效等信息,你可以根据以下接口方法进行相关信息的获取:String getUsername():获取用户名;String getPassword():获取密码;boolean isAccountNonExpired():用户帐号是否过期;boolean isAccountNonLocked():用户帐号是否锁定;boolean isCredentialsNonExpired():用户的凭证是否过期;boolean isEnabled():用户是否处于激活状态。

当以上任何一个判断用户状态的方法都返回false时,用户凭证就被视为无效。

UserDetails还定义了获取用户权限信息的方法:GrantedAuthority[] getAuthorities(),GrantedAuthority代表用户权限信息,它定义了一个获取权限描述信息(以字符串表示,如 PRIV_COMMON)的方法:String getAuthority()。

图 3 用户和权限在未使用Acegi之前,我们可能通过类似User、Customer等领域对象表示用户的概念,并在程序中编写相应的用户认证的逻辑。

现在,你要做的一个调整是让原先这些代表用户概念的领域类实现UserDetails接口,这样,Acegi就可以通过UserDetails接口访问到用户的信息了。

UserDetails可能从数据库、LDAP等用户信息资源中返回,这要求有一种机制来完成这项工作,UserDetailsService正是充当这一角色的接口。

UserDetailsService接口很简单,仅有一个方法:UserDetailsloadUserByUsername(String username) ,这个方法通过用户名获取整个UserDetails对象。

Authentication代表一个和应用程序交互的待认证用户,Acegi从类似于登录页面、Cookie等处获取待认证的用户信息(一般是用户名密码)自动构造Authentication实例。

图 4 Acegi的认证用户Authentication可以通过Object getPrincipal()获取一个代表用户的对象,这个对象一般可以转换为UserDetails,从中可以取得用户名/密码等信息。

在Authentication被AuthenticationManager认证之前,没有任何权限的信息。

在通过认证之后,Acegi通过 UserDetails将用户对应的权限信息加载到Authentication中。

Authentication拥有一个 GrantedAuthority[] getAuthorities()方法,通过该方法可以得到用户对应的权限信息。

Authentication和UserDetails很容易被混淆,因为两者都有用户名/密码及权限的信息,接口方法也很类似。

相关文档
最新文档