zoukankan      html  css  js  c++  java
  • 菜鸟-手把手教你把Acegi应用到实际项目中(1.2)

    7) daoAuthenticationProvider
      进行简单的基于数据库的身份验证。DaoAuthenticationProvider获取数据库中的账号密码并进行匹配,若成功则在通过用户身份的同时返回一个包含授权信息的Authentication对象,否则身份验证失败,抛出一个AuthenticatiionException。

        <bean id="daoAuthenticationProvider"

            class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">

            <property name="userDetailsService" ref="inMemDaoImpl" />

        </bean>

        <bean id="inMemDaoImpl"

            class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">

            <property name="userMap">

                <value>

                    javaee=password,ROLE_SUPERVISOR

                    qiuzj=password,ROLE_SUPERVISOR,disabled

    </value>

            </property>

        </bean>

    inMemDaoImpl提供的是基于内存存储用户的信息,inMemDaoImpl借助于userMap属性定义了若干用户。其中qiuzj状态为disabled,即处于失效状态

    javaee=password,ROLE_SUPERVISOR格式为: 用户名=密码,以逗号分隔的多个角色

    qiuzj =password,ROLE_SUPERVISOR,disabled格式为: 用户名=密码,以逗号分隔的多个角色,用户状态

    8) filterInvocationInterceptor
      在执行转向url前检查objectDefinitionSource中设定的用户权限信息。首先,objectDefinitionSource中定义了访问URL需要的属性信息(这里的属性信息仅仅是标志,告诉accessDecisionManager要用哪些voter来投票)。然后,authenticationManager掉用自己的provider来对用户的认证信息进行校验。最后,有投票者根据用户持有认证和访问url需要的属性,调用自己的voter来投票,决定是否允许访问。

    <bean id="filterInvocationInterceptor"

            class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">

            <property name="authenticationManager" ref="authenticationManager" />

            <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager" />

            <property name="objectDefinitionSource">

                <value><![CDATA[

                    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

                    PATTERN_TYPE_APACHE_ANT

                    /secure.jsp=ROLE_SUPERVISOR

                ]]></value>

            </property>

        </bean>

    objectDefinitionSource定义了web资源与角色的对应关系,即URL的权限配置信息。用于指定不同的URL资源对应的权限。例如配置:

    /**/*.jpg=AUTH_ANONYMOUS,AUTH_USER

    /**/*.gif=AUTH_ANONYMOUS,AUTH_USER

    /**/*.png=AUTH_ANONYMOUS,AUTH_USER

    /login.jsp*=AUTH_ANONYMOUS,AUTH_USER

    /**=AUTH_USER

    以上配置指定AUTH_ANONYMOUS权限的用户(即匿名用户)只可以访问图片资源和登录页面,AUTH_USER权限的用户可以访问全部WEB资源。

    9) httpRequestAccessDecisionManager(投票通过策略管理器)用于管理投票通过策略。Acegi提供三种投票通过策略的实现:

    AffirmativeBased(至少一个投票者同意方可通过),ConsensusBased(多数投票者同意方可通过),UnanimousBased(所有投票者同意方可通过)。本程序采用AffirmativeBased策略,并且禁止“没人反对就通过”的投票策略。

    <bean id="httpRequestAccessDecisionManager"

            class="org.acegisecurity.vote.AffirmativeBased">

            <property name="allowIfAllAbstainDecisions" value="false"/>

            <property name="decisionVoters">

                <list>

                    <bean class="org.acegisecurity.vote.RoleVoter"/>

                </list>

            </property>

        </bean>

    必须是以rolePrefix设定的value开头的权限才能进行投票,如AUTH_ , ROLE_

        <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter">
    
            <property name="rolePrefix" value="AUTH_"/>
    
       </bean>

    默认时,rolePrefix = "ROLE_"

    开发环境:

    MyEclipse 5.0GA

    Eclipse3.2.1

    JDK1.5.0_10

    tomcat5.5.23

    acegi-security-1.0.7

    Spring2.0

    Jar包:

    acegi-security-1.0.7.jar

    Spring.jar

    commons-codec.jar

    好啦,第一篇到此结束,晚上快两点了,该睡觉了,晚安朋友们!

  • 相关阅读:
    倒计时
    用css 添加手状样式,鼠标移上去变小手
    二维数组去重方法
    权限管理
    文件操作
    【十一章】:RabbitMQ队列
    【十一章】:Memcache、Redis
    【第十章】:I/O多路复用、异步I/O(综合篇)
    【模块】:paramiko
    【第九章】:线程、进程和协程
  • 原文地址:https://www.cnblogs.com/wzh123/p/3392992.html
Copyright © 2011-2022 走看看