- 浏览: 179490 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
masuweng:
好好
与ant结合使用yguard -
lenomon:
你也可以看看这个,Linux同步时间命令ntpdate
Linux与远程时间服务器同步 -
木叶之舟:
我这里有个疑问,就是我想通过拦截外键的属性,该怎样实现呢?
比 ...
springside的filter查询 -
dongbiying:
好!
与ant结合使用yguard -
javaray:
遨豪(大连)科技有限公司自2007年与Liferay,Inc合 ...
Liferay的CAS SSO实现思路
一 例子功能简介
联系人管理说明了下列中心的Acegi安全控制能力:
- Role-based security (基于角色的安全) ――每个责任人都是某个角色的一员。而角色被用来限制对某些安全对象的访问。
- Domain object instance security (域对象实例安全) ――合同,这个系统里的主要域对象,拥有一个访问控制列表( ACL ),用来指明谁允许读、管理和删除对象。
-
Method invocation security
(方法调用安全)――
这个
ContactManager
服务层对象 包含一些受保护的和公开的方法。 -
Web request security
(
Web
请求安全)
――这个“
/secure
” URI 路径被使用 Acegi 安全保护,使得没有ROLE_USER
角色的用户无法访问。 . - Security unaware application objects (保护未知的应用对象) ――受保护的对象与 Acegi 之间没有明显的耦合或契约,所以它们没有察觉到安全是由 Acegi 提供的。 *
- Security taglib usage (安全标签库使用) ――所有的 JSP 使用 Acegi 安全标签库来封装安全信息。 *
- Fully declarative security( 完全声明式的安全 ) ――每一个安全方面特性都是在 application context 里面使用标准的 Acegi 安全对象来配置的。 *
- Database-sourced security data (支持数据库来源的安全数据) ――所有的用户、角色和 ACL 信息都可以从一个兼容 JDBC 的内存数据库获得。
- Integrated form-based and BASIC authentication (集成基于表单和 BASIC 验证)―― 任何 BASIC 验证头部被检测以及作为验证使用。默认使用基于表单的普通交互式验证。
- Remember-me services (记住我的服务)―― Acegi 安全的插件式的“ remember-me ” 策略被演示。在登录表单里有一个相关的选择框与之对应。
联系人管理的业务功能描述:
1. 1.
每个用户登录后,可以看到一个联系人列表。例如,
id
Name
Email
1
John Smith
john@somewhere.com
2
Michael Citizen
michael@xyz.com
3
Joe Bloggs
joe@demo.com
4
Karen Sutherland
karen@sutherland.com
说明:用户没有权限访问的联系人信息,将不会显示。
2. 2.
用户可以增加新的联系人信息。
3. 3.
如果有删除权限,用户可以看到在联系人后面有一个“
Del
”链接。用户可以点击这个链接来删除某个联系人信息。
4. 4.
如果有管理权限,用户可以看到在联系人后面有一个“
Admin Permission
”链接。用户可以点击这个链接来管理访问这个联系人的权限。例如,
说明:每一行记录包含有
3
列。
第一列表示权限,例如,“
第二列也表示权限,但它是以类似
unix
权限的数字表达。例如,“
[22]
”
,
表示可读、可写、可删除。
第三列是用户名称。
每一行记录后面都有一个“
Del
”链接。点击这个链接,可以删除掉指定用户对这个联系人信息的权限。
5. 5.
用户可以为某个联系人信息添加权限。例如,
Contact:
sample.contact.Contact@1787005: Id: 1; Name: John Smith; Email: john@somewhere.com
Recipient:
-- please select --
dianne
marissa
peter
scott
ROLE_SUPERVISOR
ROLE_USER
Permission:
None
Administer
Read
Delete
Read+Write+Delete
marissa's Contacts
Administer Permissions
sample.contact.Contact@26807f: Id: 1; Name: John Smith; Email: john@somewhere.com
-R--- [2] dianne
-RW-D [22] peter
A---- [1] marissa
-RW-D
”表示可读、可写、可删除。
Add Permission
说明:权限是动态添加的。例如,上图中给用户
scott
增加了读联系人
John
的权限。那么
scott
马上就可以看到联系人
John
的信息了。
二 功能实现分析
联系人管理的web应用在启动时候,会做一系列初始化动作:
1. 读取web.xml文件,并解析文件里的内容。
a) context-param元素。
i. contextConfigLocation属性。这个属性定义了spring所需要的3个属性文件。它们分别是:applicationContext -acegi-security.xml、applicationContext-common-business.xml、 applicationContext-common-authorization.xml
ii. log4jConfigLocation属性。这个属性定义了log4j配置文件。
这里定义了acegi的一个过滤器。Acegi的大部分过滤器都是这样配置的。使用FilterToBeanProxy组件,给它传递一个targetClass属性。这个targetClass必须实现javax.servlet.Filter接口。
这里配置的是FilterChainProxy。这个FilterChainProxy比较好用,可以为它定义一串filter属性。这些filter将会按照定义的顺序被调用。例如,
<bean id="filterChainProxy" class="net.sf.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
</value>
</property>
</bean>
这个过滤器的mapping是“/*”。
c) listener元素。
i. ContextLoaderListener。这个是Spring使用来加载根applicationcontext。并分别解析 applicationContext-acegi-security.xml、applicationContext-common- business.xml、applicationContext-common-authorization.xml等配置文件,把相关的对象初始化
iii. Log4jConfigListener。这个是spring用来初始化log4j组件的listener。
iv. HttpSessionEventPublisher。这个组件将发布HttpSessionCreatedEvent和HttpSessionDestroyedEvent事件给spring的applicationcontext。
d) servlet元素。
i. contacts。这里采用了spring的MVC框架, 所以这个servlet是spring MVC的一个核心控制器(org.springframework.web.servlet.DispatcherServlet)。这个servlet 启动时候,会从contacts-servlet.xml里面读取信息,并做相关的初始化。
v. remoting。也是spring MVC的一个核心控制器。与contacts不同,这个servlet主要是提供web services服务。这个servlet启动时候, 会从remoting-servlet.xml里面读取信息,并做相关的初始化。
e) taglib元素。这里定义了spring的标f) 签库。
3. 解析applicationContext-acegi-security.xml。
a) 过滤器链。定义了一个FilterChainProxy,并指定了一系列的过滤器链。 httpSessionContextIntegrationFilter, authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter
b) 认证管理器。这个管理器由acegi提供。这个管理器需要一个providers参数。这个providers参数包含了提供系统认证的对象。
i. daoAuthenticationProvider。一般用户认证。
ii. anonymousAuthenticationProvider。匿名用户认证。
iv. rememberMeAuthenticationProvider。记住我认证。
d) 定义了一个jdbcDao实现类。这个类由acegi提供的net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl。这个对象需要一个dataSource的参数。
e) 定义daoAuthenticationProvider。这个对象由acegi提供。它有3个属性:
authenticationDao。这里指向前面定义的jdbcDao。
userCache。这里指向后面定义的user缓存对象。
passwordEncoder。这里指向前面定义的密码加密对象。
f) 用户缓存管理。
为了缓存user,这里使用spring的ehcache来缓存user。缓存机制:
i. 定义缓存管理器――CacheManager。这个对象是spring的EhCacheManagerFactoryBean对象
ii. 定义user缓存实际执行对象――UserCacheBackend。这个对象是spring的EhCacheFactoryBean。它有两个属性:
1. cacheManager。这里指向前面定义的缓存管理器。
2. cacheName。
iii. 定义user缓存――UserCache。它是acegi提供的EhCacheBasedUserCache对象。它有一个属性: cache。这里指向的是前面定义的userCacheBackend。
4. 解析applicationContext-common-business.xml。
a) dataSource.这里使用了spring的DriverManagerDataSource对象。这个对象是一个JDBC数据源的定义。
b) TransactionManager。这里使用spring的DataSourceTransactionManager对象。
c) 事务拦截器。这里使用spring的事务拦截器TransactionInterceptor。它有2个属性:
transactionManager。这个属性指向前面定义的TransactionManager。
transactionAttributeSource。这个属性里, 指定了ContactManager的各个方法的事务方面的要求。
d) DataSourcePopulator。
使用sample.contact.DataSourcePopulator对象,往HSQL里创建相关的表结构和数据。
实现原理:DataSourcePopulator 实现了接口 InitializingBean。其中afterPropertiesSet方法将在spring初始化DataSourcePopulator后被调用。
e) ContactDao。这里指向一个ContactDaoSpring对象。它继承spring的 JdbcDaoSupport,并实现ContactDao接口。它是真正实现JDBC操作的对象。
g) ContactManager。这里使用的是spring的ProxyFactoryBean。它有2个属性:
i. ProxyInterfaces。代理接口:sample.contact.ContactManager
h) ContactManagerTarget。这里指向的是sample.contact.ContactManagerBackend对象。 ContactManagerBackend实现了ContactManager接口和InitializingBean接口。它有2个自定义属性: contactDao和basicAclExtendedDao。这里会调用ACL的API去做些创建权限和删除权限的工作。
发表评论
-
用exp/imp远程操作数据库
2012-03-27 10:55 1132在http://icyheart.iteye.com/bl ... -
Eclipse for JEE 3.5.2 maven插件安装
2012-03-27 10:56 2530先安装gef插件,然后安装subclipse插件,最后安装m2 ... -
onkeypress,onkeydown,onkeyup区别 和 javascript event.keycode值大全
2010-08-05 17:32 4800onkeypress是在用户按下并放开任何字母数字键时发生 ... -
国王和100个囚犯
2010-01-15 11:27 875看到一个关于算法的帖子,总结了下跟帖的算法发表一下: 原贴地 ... -
搞懂java中的synchronized关键字
2009-12-12 17:55 17841、synchronized关键字的作用域有二种: 1 ... -
JAVA 30个基本知识
2009-12-12 17:53 7951.OOP中唯一关系的是对 ... -
精妙的SQL語句
2009-12-12 17:51 914说明:复制表(只复制结构,源表名:a 新表名:b) SQL: ... -
JPA & Hibernate 注解
2009-11-25 18:05 1132原文地址:http://blog.csdn.net/eastl ... -
Servlet监听器详解
2009-11-11 16:56 1165原文地址:http://www.21jn.net/html/8 ... -
Servlet过滤器介绍之原理分析
2009-11-11 16:31 1277原文地址:http://zhangjunhd.blog.51c ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-11-11 14:46 1019原文地址:http://sunxboy.iteye.com/b ... -
jsp常见问题
2009-11-11 14:14 1372原文地址:http://liujinpan75.iteye.c ... -
OGNL表达式语言介绍
2009-11-09 18:08 1918原文地址:http://darkranger.iteye.co ... -
OGNL的用法
2009-11-09 17:46 1401原文地址:http://www.blogjava.net/ma ... -
jmail收发邮件
2009-10-28 17:09 1675jmail收发邮件,发送邮件基于smtp协议,收邮件基于pop ... -
程序员每天该做的8件事
2009-09-23 15:10 862不重视细节,如何谈得上成功? 1)程序员每天总结自己一天 ... -
jasperreports-1.3.3与iReport1.3.3初级使用
2009-09-14 17:43 2642这几天多在用jasperreports写下一点入门的东西。这里 ... -
ant使用
2009-08-07 15:16 1130参考地址: http://www.blogjava. ... -
Alpha、Beta、RC、GA版本的区别
2009-08-05 11:08 1360Alpha、Beta、RC、GA版本的区别 ... -
基本排序
2009-07-15 12:20 844package zyio; public class Tes ...
相关推荐
1、一个Acegi的例子,可以运行 2、一个很好的学Acegi的网址,0基础学习Acegi,强烈推荐 3、有什么问题可以发邮件heroshen@126.com讨论
Acegi 例子Acegi 例子Acegi 例子Acegi 例子Acegi 例子Acegi 例子
acegi例子 acegi例子 acegi例子 acegi例子
ACEGI ACEGI学习指南 ACEGI例子,标准的组合,例子可以正常运行
spring Acegi例子,很简单的一个acegi实例,容易理解
Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解
acegi-security-1.0.7.jar 加入了数据库驱动(mysql5) mysql-connector-java-5.1.6-bin.jar 这两个包附件中已包含。 4. jdbcDaoImpl配置如下: <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails....
acegi安全框架例子--Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。
acegi例子,包含lib文件,可在myeclipse6.0.1下直接运行通过。
acegi,acegi,acegi
acegi配置,让你更好的合理的了解acegi是什么
最近因为公司的需要,用acegi进行权限控制,简单总结了一下,和大家分享
Acegi学习笔记(JAVA系统安全编程时用到),我就用到了Acegi,真的太牛了。
这是一个基于acegi的jcaptcha的验证码例子,希望对正在学习的大家有所帮助
详细说明用户、角色、权限之间的转换
不错的ACEGI 教程
Acegi文档 spring acegi 详细文档
acegi学习整理合集 很全 工作中搜集整理的
acegi 框架 介绍 spring 安全