`
wangchao_17915566
  • 浏览: 169516 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

acegi过滤器

阅读更多

    最近研究了下acegi,原因是我要进行flex的项目,但是不知道flex的权限如何实现,所以就想到了acegi。

    从网上下载了acegi发布的0.8版本的,这个版本所有接口都在net.sf中,我使用的是acegi1.7版本,这就面临着根据别人的例子自己做。

    首先谈下acegi中最重要的acegi filter。

    一,httpSessionContextIntegrationFilter

   

<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/> 

 说明:
1,必须将filter配置为过滤器链中的第一个过滤器,是验证信息能跨越多个请求
2,为了解决认证主题安全信息能在多个http请求之间保持共享,acegi将认证主体安全信息缓存于HttpSession中,当用户请求一个受限制资源时,acegi通过HttpSeesionContext实例则保存在acegi容器的SecurityContextHolder里,当请求结束之后,HttpSeesionContextIntergrationFilter执行相反操作,将SecurityContext中的认证主体安全信息重新转存到HttpSession中,然后从SecurityContextHolder中清除对应的SecurityContext实例
3,securityContextHolder是框架集容器,它保存着和用户关联securityContext实例,SecurityContext承载着用户的账号以及权限信息,通过以下方法可以取到这些信息:securityContextHolder.getContext().getAuthentication().

 

    二,logoutFilter

<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">  
        <constructor-arg value="/index.jsp"/>  
        <constructor-arg>  
            <list>  
                <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>  
            </list>  
        </constructor-arg>  
        <property name="filterProcessesUrl" value="/j_acegi_logout"/>  
    </bean>  

 说明
1,负责处理退出系统后需要的清理工作
2,layoutFilter过滤器的构造方法有两个参数:一个表示成功退出后转向的url,另外一个表示退出系统需要进行的操作,操作可以十多个。
3,securityContextLogoutHanlder操作类会把Httpsession销毁,清除SecurityContextHolder里的SecurityContext实例,把RememberMeServices从cookies中清除,然后重定向到指定的退出登录页面
4,filterPricessUrl:指定用于响应退出系统请求的url,其默认值为/j_acegi_lagout。当访问url为filterProcessUrl属性值时,logoutFilter过滤器会被调用

 

   三,认证处理过滤器authenticationPrcessingFilter

<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">  
    <property name="filterProcessesUrl" value="/j_security_check"/>  
    <property name="authenticationFailureUrl" value="/index.jsp?login_error=1"/>  
    <property name="defaultTargetUrl" value="/main.action"/>  
    <property name="authenticationManager" ref="authenticationManager"/>  
    <property name="rememberMeServices" ref=""/><!-可选 -->  
</bean>  

 

说明
1,负责处理基于表单的身份证验证请求
2,当接收到与filterProcessesUrl所定义相同的请求时,它会首先通过AuthenticationManager来验证用户身份,如果验证成功,则重定向到defaultTargetUrl所定义的成功登陆页面,如果验证失败,则再从rememberMeServices中获取用户身份,若再次获取失败,则重定向到authenticationFailureURl所定义的登陆失败页面
3,filterProcessesUrl:默认/j_acege_security_check。该值必须与登录页面form的action值一致。form中输入的用户名的input空间的name必须为j_username;输入密码的input空间必须为j_password
4,rememberMeServices负责通过以cookie的形式保存先前的用户登录信息。在authentication对象不存在时,remberMeProcessingFilter会调用rememberMeServices的autologin()方法,尝试在cookies中获取用户登陆信息,如果存在则返回Authentication对象,在每次登陆时,弱国设置了rememberMe功能,在验证用户身份成功后,则会调用loginsuccess()方法记录用户信息在cookies中,否则调用loginFail()方法清除cookies.

 

   四,认证管理器authenticationManager

<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">  
    <property name="providers">  
        <list>  
            <ref local="daoAuthenticationProvider"/>  
            <ref local="anonymousAuthenticationProvider"/>  
        </list>  
    </property>  
</bean> 

 说明
1,认证管理器用来管理身份验证提供者。它将验证的功能委托给多个provider,并通过便利providers,以保证获取不同来源的身份认证,若某个provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的authentication对象,否则会抛出一个AuthenticationException.
2,无论成功与否,认证管理器都会发布一个ApplicationEvent事件对象

 

五,身份证提供者

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">  
    <property name="userDetailsService" ref="userDao"/>  
    <property name="userCache" ref="userCache"/>  
    <property name="passwordEncoder" ref="passwordEncoder"/><!-可选 -->  
</bean>  
<bean id="anonymousAuthenticationProvider" class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">  
    <property name="key" value="anonymous"/>  
</bean>  
  
<bean id="userDao" class="com.cjm.web.dao.impl.UserDaoImpl">  
    <property name="sessionFactory" ref="sessionFactory"/>  
</bean>  
  
<bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">  
    <property name="cache">  
        <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">  
            <property name="cacheManager">  
                <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>  
            </property>  
            <property name="cacheName" value="userCache"/>  
        </bean>  
    </property>  
</bean>  
  
<bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"/>

 说明
1,daoAuthenticationProvider:负责提供用户信息,包括用户名和密码。其中取用户名密码的工作交给userDetaisService来做
2,anonymousAuthenticationProvider:匿名用户身份验证
3,userDao:用于在数据库中获取用户信息。userDaoImpl需要实现Acegi提供的UserDetailsService接口类
4,userCache:缓存用户和资源相对应的权限信息,每当请求一个收保护资源时,daoAuthenticationProvider就会被调用以获取用户授权信息。如果每次都从数据库获取的话,那代价很高,对于不常改变的用户和资源信息来说,最好把相关的授权信息缓存起来
5,passwordEncoder:使用加密器对用户输入的明文进行加密。acegi提供三种加密器:
                 plaintextPasswordEncoder--默认,不加密,返回明文
                 shaPasswordEncoder--哈希算法加密
                 d5PasswoedEncoder-md5加密

 

六,securityContextHolderAwareRequestFilter

 

<bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/> 

 说明
1,负责通过Decorate Model(装饰模式)装饰HttpServletRequest对象
Wapper是ServletRequest包装类HttpServletRequestWrapper的子类(savedReuqestAwareWrapper或者SecurityContextHolderAwareRequestWrapper).附上获取用户权限信息,request参数,heager。date,headers和cookies的方法

 

七,anonymousProcessingFilter

<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">  
    <property name="key" value="anonymous"/>  
    <property name="userAttribute" value="anonymous,ROLE_ANONYMOUS"/>  
</bean> 

 说明
1,该过滤器用于判断ContextHolder中是否有authentication对象,如果没有就创建一个authentication对象,其中包含的用户名是anonymous,用户权限是ROLE_ANONYMOUS,这使得没有登录的匿名用户就够自动的获得匿名的用户名和权限

 

八,exceptionTranslationFilter

<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">  
        <property name="authenticationEntryPoint">  
            <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">  
                <property name="loginFormUrl" value="/index.jsp"/>  
                <property name="forceHttps" value="false"/>  
            </bean>  
        </property>  
        <property name="accessDeniedHandler">  
            <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">  
                <property name="errorPage" value="/accessDenied.jsp" />  
            </bean>  
        </property>  
    </bean>  

  说明

1,该过滤器用于处理身份证和授权过程中的异常
2,authernticationEntryPoint:将用户重定向到一个基于html的登录页面
loginFormUrl:指定登陆页面
ForceHttps:指定是否强制使用Https协议
errorPage:之得那个访问拒绝时要跳转到的页面

 

九,filternvocationInterceotor

<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">  
        <property name="authenticationManager" ref="authenticationManager"/>  
        <property name="accessDecisionManager" ref="accessDecisionManager"/>  
        <property name="objectDefinitionSource">  
            <value>  
                PATTERN_TYPE_APACHE_ANT   
                /index.jsp*=ROLE_ANONYMOUS   
                /accessDenied.jsp*=ROLE_ANONYMOUS   
/**/*.jsp*=ADMIN,SYS_MANAGER   
                /**/*.htm*=ADMIN,SYS_MANAGER   
                /**/*.action*=ADMIN,SYS_MANAGER   
            </value>  
        </property>  
    </bean>  

 

说明
1, 该filter会首先调用authenticationManager判断用户是否已登录认证,如果没认证成功,则重定向到登陆界面,如果认证成功,则从Authentication中获得用户的权限,然后从objectDefinintionSource属性获取各种URL资源所对应的权限,最后调用AccessDecisionManage来判断用户所拥有的权限与当前受保护的url资源对应的权限是否匹配,如果匹配失败,则返回403错误给用户,如果匹配成果,则用户可以访问受保护的url资源

 

十,访问决策管理器accessDecisionManager

<bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">  
    <property name="allowIfAllAbstainDecisions" value="false"/>  
    <property name="decisionVoters">  
        <list>  
            <bean class="org.acegisecurity.vote.RoleVoter">  
                <property name="rolePrefix" value=""/>  
            </bean>  
        </list>  
    </property>  
</bean>  

 

说明
1,通过投票机制来决定是否可以访问某一资源,acegi提过三种投票策略。
AffrimativeBased(至少一个投票者同意方可通过)
ConsensusBased(多数投票者同意方可通过)
UnanimousBased(所有投票者同意方可通过)
2 ,allowIfAllAbstainDecisions:设定是否允许"没人反对就通过"的投票策略
3,reolePrix:角色投票这支持的权限前缀,默认Role_.权限必须以rolePrefix设定的值开头才能进行投票

 

以上是过滤器的作用,说一下,在acegi1.0版本以前所有接口都在net.sf,中1.0后是org中。并且在1.0以后SecurityEnforcementFilter 此过滤器被exceptionTranslationFilter代替。

 

给大家配备一个acegi0.8的demo

分享到:
评论
4 楼 wangchao_17915566 2008-11-04  
谢谢,我是要学习的,可是没有现成的例子,我只能从有例子的学起,我会尽快学习的。
3 楼 dakulaliu 2008-10-30  
10.22,呵呵,赶紧转移Spring Security 2.0.最简单配置不超过20行配置,就可以跑起来!!
2 楼 tedeyang 2008-10-22  
acegi全面转移到spring security 了
楼主你也赶紧转移吧.
1 楼 kjj 2008-10-22  
什么年代了还用acegi ,现在都 是spring security 2.0 了

相关推荐

    Acegi配置指南[整理].pdf

    总结来说,Acegi 配置涉及的主要步骤是:在 `web.xml` 中配置 Acegi 过滤器代理,然后在 `acegi.xml` 中定义过滤器链,包括认证、授权和异常处理等核心组件。这样的配置使得 Acegi 能够在每次请求时检查用户的身份和...

    挑战Acegi1.0

    Acegi过滤器配置 ```xml &lt;filter-name&gt;AcegiFilterChainProxy &lt;filter-class&gt;org.acegisecurity.util.FilterToBeanProxy &lt;param-name&gt;targetClass &lt;param-value&gt;org.acegisecurity.util.FilterChainProxy ...

    Acegi开发指南.

    通过在配置文件中指定哪些URL资源需要使用HTTPS,Acegi过滤器会自动处理这些资源的协议转换,简化了HTTPS的集成过程。 #### 五、安全对象访问控制 Acegi中的受保护资源被称为“安全对象”,主要包括URL资源和业务...

    Acegi 各过滤的解析(二)

    在“Acegi 各过滤的解析(二)”这篇博文中,作者深入探讨了 Acegi 框架中的核心过滤器,以及如何通过配置 `applicationContext-security.xml` 文件来定制安全策略。下面我们将详细解析 Acegi 的关键过滤器及其配置...

    acegi

    - **过滤器链(Filter Chain)**:Acegi 使用过滤器链来拦截请求,执行安全检查,这是其实现安全控制的关键机制。 2. **Acegi 的主要组件** - **AuthenticationManager**:处理用户的登录请求,负责身份验证。 -...

    Acegi 各过滤的解析(一)

    本文将重点解析Acegi Security中的各个过滤器,这些过滤器在保护应用程序的安全方面起着至关重要的作用。 首先,我们要了解过滤器在Web应用中的角色。在HTTP请求被传递到Servlet容器之前,过滤器可以对请求进行...

    基于java的ACEGI

    4. **过滤器链(Filter Chain)**:Acegi通过Servlet过滤器实现其功能,这使得它可以与其他Web框架无缝集成。过滤器链可以根据配置拦截请求,进行身份验证和授权检查。 在《实战Acegi:使用Acegi作为基于Spring框架...

    Acegi框架介绍 acegi安全与认证

    Acegi使用Servlet过滤器来保护URL资源,对每个请求进行权限检查。同时,它通过Spring AOP在方法级别进行拦截,阻止未经授权的访问。对于领域对象的访问,Acegi会在执行Bean方法前检查访问控制列表(ACL),确保用户...

    Acegi例子代码+一个很好的学习Acegi的网址

    4. **过滤器安全链(Filter Security Interceptor)**:Acegi的核心组件之一,它是一个Spring MVC的过滤器,会在请求被处理之前检查用户的权限。如果用户没有足够的权限,过滤器将阻止请求的进一步处理。 5. **频道...

    Acegi学习笔记(JAVA系统安全编程时用到)

    Acegi 还提供了许多预定义的安全过滤器,如 UsernamePasswordAuthenticationFilter 和 AnonymousProcessingFilter,它们可以轻松集成到 Filter Chain 中。 总的来说,Acegi 提供了一个强大且灵活的框架,使 Java ...

    spring acegi 详细文档

    配置包括定义访问控制规则、配置认证和授权策略,以及设置安全过滤器链。 例如,以下是一个简单的XML配置示例,定义了一个URL访问规则: ```xml &lt;bean id="filterSecurityInterceptor" class="org.acegisecurity....

    acegi的使用

    Acegi 使用 Servlet 过滤器来保护 Web 应用,通过身份认证和授权来确保系统的安全性。该框架利用了 Spring 框架的依赖注入和面向切面编程(AOP)特性,使得安全功能可以独立于应用代码,降低了安全性和业务逻辑之间的...

    spring Acegi例子,很简单的一个acegi实例,容易理解

    3. **过滤器安全链(Filter Security Interceptor)**:Acegi的核心组件之一,它是Servlet过滤器,负责拦截请求并根据配置的策略进行身份验证和授权。 4. **安全性配置(Security Configurations)**:在Spring应用...

    acegi-sample.rar_acegi

    当用户请求到达服务器时,Acegi的过滤器链会检查请求,执行认证和授权过程。如果用户未认证或无权访问,Acegi将阻止请求,返回相应的错误信息。 3. **会话管理**: Acegi提供了一套完整的会话管理策略,包括会话...

    acegi2.0

    Acegi 2.0的核心是过滤器链,它包含了多个安全相关的过滤器,如AuthenticationProcessingFilter用于处理登录请求,FilterSecurityInterceptor则用于执行访问控制决策。 4. **会话管理**: Spring Security提供了...

    Acegi配置指南

    在配置Acegi时,首先需要在`web.xml`文件中定义一个名为`Acegi Filter Chain Proxy`的过滤器。这个过滤器是Acegi安全机制的核心,它负责拦截所有请求并根据配置执行相应的安全策略。下面是一段典型的`web.xml`配置...

Global site tag (gtag.js) - Google Analytics