Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7580144 建立时间:2006年5月29日 |

| |
[Acegi]acegi-security-sample-contacts-filter例子学习(二) 软件技术, 电脑与网络
lhwork 发表于 2006/6/13 11:51:17 |
功能实现分析这个例子使用了HSQL做数据库,spring的AOP作为基础,使用Acegi做安全控制组件。联系人管理的web应用在启动时候,会做一系列初始化动作:1. 读取web.xml文件,2. 并解析文件里的内容。a) context-param元素。i.
contextConfigLocation属性。这个属性定义了spring所需要的3个属性文件。它们分别是:applicationContext
-acegi-security.xml、applicationContext-common-business.xml、
applicationContext-common-authorization.xmlii. log4jConfigLocation属性。这个属性定义了log4j配置文件。b) filter元素。这里定义了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,b) 并指c)
定了一系列的过滤器链。httpSessionContextIntegrationFilter,
authenticationProcessingFilter,basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,securityEnforcementFilterd) 认证管理器。这个管理器由acegi提供。这个管理器需要一个providers参数。这个providers参数包含了提供系统认证的对象。i. daoAuthenticationProvider。一般用户认证。ii. anonymousAuthenticationProvider。匿名用户认证。iv. rememberMeAuthenticationProvider。记住我认证。e) 密码加密。这里定义了一个acegi的Md5算法加密对象Md5PasswordEncoder。f) 定义了一个jdbcDao实现类。这个类由acegi提供的net.sf.acegisecurity.providers.dao.jdbc.JdbcDaoImpl。这个对象需要一个dataSource的参数。g) 定义daoAuthenticationProvider。这个对象由acegi提供。它有3个属性:authenticationDao。这里指向前面定义的jdbcDao。userCache。这里指向后面定义的user缓存对象。 passwordEncoder。这里指向前面定义的密码加密对象。h) 用户缓存管理。为了缓存user,这里使用spring的ehcache来缓存user。缓存机制:i. 定义缓存管理器――CacheManager。这个对象是spring的EhCacheManagerFactoryBean对象ii. 定义user缓存实际执行对象――UserCacheBackend。这个对象是spring的EhCacheFactoryBean。它有两个属性:1. cacheManager。这里指向前面定义的缓存管理器。2. cacheName。iii. 定义user缓存――UserCache。它是acegi提供的EhCacheBasedUserCache对象。它有一个属性:1. cache。这里指向的是前面定义的userCacheBackend。i) 定义接收来自DaoAuthenticationProvider的认证事件的listener――LoggerListener。j) 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,g) 并实现ContactDao接口。它是真正实现JDBC操作的对象。h) ContactManager。这里使用的是spring的ProxyFactoryBean。它有2个属性:i. ProxyInterfaces。代理接口:sample.contact.ContactManagerii.
InterceptorNames。拦截器名称。可以有多个,iv.
这里包括:transactionInterceptor、contactManagerSecurity、contactManagerTarget。
其中,v.
transactionInterceptor是前面定义的事务拦截器。ContactManagerSecurity则是在
applicationContext-common-authorization.xml里定义的方法调用授权。i)
ContactManagerTarget。这里指向的是sample.contact.ContactManagerBackend对象。
ContactManagerBackend实现了ContactManager接口和InitializingBean接口。它有2个自定义属性:
contactDao和basicAclExtendedDao。这里会调用ACL的API去做些创建权限和删除权限的工作。 |
|
回复:acegi-security-sample-contacts-filter例子学习(二) 软件技术, 电脑与网络
hi(游客)发表评论于2006/10/28 15:50:19 |
你好,我有些 Acegi 的问题想请教你,方便的话请联系我。 MSN: wearlover@hotmail.com |
|
» 1 »
|