首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

(转)Acegi配备文档

2012-06-28 
(转)Acegi配置文档(转)Acegi配置文档 . 分类: Acegi2008-02-04 10:19540人阅读评论(0)收藏举报Acegi配置文

(转)Acegi配置文档


(转)Acegi配置文档
.
分类: Acegi2008-02-04 10:19540人阅读评论(0)收藏举报

Acegi配置文档
作者:javafish(likunkun)
Email:javafish@sunxin.org
Acegi是基于Spring的一个开源的安全认证框架,现在的最新版本是1.04。Acegi的特点就是有很多的过滤器:不过我们也用不到这么多的过滤器,只是可以把它们看作为一个个的模块,在用的时候加上自己用的着的即可,由于认证的流程的方面比较复杂导致它的配置很复杂,如果能摸清它的工作原理还是不太难.下面用比较顺着人思维的流程过一遍
这里只列出常用的过滤器和拦载器
1. 过滤器:HttpSessionContextIntegrationFilter,authenticationProcessingFilter,BasicProcessingFilter,RememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter
2. 拦截器:filterSecurityInterceptor(其实它是过滤器,不过把它放在这里更能说明它的功能),methodSecurityInterceptor
看着上面的用红色标出的过滤器是用来认证(表单和HTTP基本认证,当然还有别的不过这两个比较长用)它们是资源访问的入口.其它的过滤器是用来辅助的:HttpSessionContextIntegrationFilter是用来把认证信息记录到Session中的RememberMeProcessingFilter是以cookie的形式来保存认证信息的. anonymousProcessingFilter是在匿名的时候(这时候是没有认证信息的)给这个用户分配一个匿名的认证信息,exceptionTranslationFilter总结一下异常并处理.在实际中选择适合程序的即可.
上面只是资源访问的入口,真正保护资源的是这两个拦截器:filterSecurityInterceptor,拦截URL的类(它是个过滤器)
metohdSecurityInterceptor,拦截类中方法的调用,它们为什么要拦截呢?就是想在访问或调用这些方法之前来判断一下用户是否有访问或调用的权限,有就通过,没有就踢出.
除此之外,Acegi专门做了两个管理器(实际上就是两个类,为什么会用做这两个管理器,因为认证和授权都有一些的操作,这就需要专门做两个管理器了):authenticationManager(class= org.acegisecurity.providers.ProviderManager),授权管理器accessDecisionManager(class=org.acegisecurity.vote.AffirmativeBased)
说白了一个用于认证用户,一个是用于权限的授于的
先来说认证用户,认证管理器有什么东西呢?只内置了一些提供者:这些提供者呢又是什么呢,他们是提供用户的验证身份信息的,比如从数据库或配置文件里读出用户名和密码,在用户的cookie里读出身份信息(rememberMeProcessingFilter用到的[前面讲了的,有印象吧]),或在Session里读出身份验证信息(HttpSessionContextIntegrationFilter起作用的),这里我们只说一下从数据库或配置文件里读出用户名密码来装配验证信息的,其它的配置类似可以找一下对应api在Spring里配置即可,daoAuthenticationProvider是数据库的提供者class=org.acegisecurity.providers.dao.DaoAuthenticationProvider,而它提供的服务呢又有几种,数据库和配置文件(这是Acegi的两个默认的实现)当然也可以自己实现(实现userDetailsService接口就行)



Java代码
01.<bean id="authenticationManager" + header);  
03.        }  
04.        if ((header != null) && header.startsWith("Basic ")) {//从这里可以看到一般的登陆基本认证是不起作用的  
05.................. 



view plaincopy to clipboardprint?
01.if (logger.isDebugEnabled()) { 
02.            logger.debug("Authorization header: " + header); 
03.        } 
04.        if ((header != null) && header.startsWith("Basic ")) {//从这里可以看到一般的登陆基本认证是不起作用的 
05.................. 

只有在服务器上配置哪个目录在访问的时候用HTTP基本认证,它才会起作用(一开始还以为是Acegi的BUG呢)
下面说一下真正对URL资源的保护了filterSecurityInterceptor它的本质是个过滤器,有了前面*管理器的基础了这就很容易了:



Java代码
01.<bean id="filterSecurityInterceptor" value="/failure.html"/><!-- 发生异常转向的网页 -->  
06.        </bean>  
07.      </property>  
08.   </bean>  
09.   <bean id="authenticationProcessingFilterEntryPoint" value="/failure.html"/><!-- 发生异常转向的网页 --> 
06.        </bean> 
07.      </property> 
08.   </bean> 
09.   <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.util.FilterChainProxy">  
02.        <property name="filterInvocationDefinitionSource">  
03.            <value>  
04.                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON  
05.            PATTERN_TYPE_APACHE_ANT  
06.            /**=HttpSessionContextIntegrationFilter,authenticationProcessingFilter,BasicProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor  
07.            </value>  
08.        </property>  
09.    </bean> 
  
分享到:

热点排行