5.Shiro认证流程3_ 多realm认证,认证策略

1.多realm验证,那么首先肯定是有多个自定义realm,然后在返回的SimpleAuthenticationInfo()对象是一样的,只不过在需要在IOC容器中多配置一步。这里以MD5和SHA1为例。
注入自定义realm的Bean
    <bean id="jdbcRealm" class="com.test.shiro.realm.ShiroRealm">
      <!--凭证匹配器,指定加密方式及加密次数-->
      <property name="credentialsMatcher">
           <bean  class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!--指定加密算法,指定之后前台传的参数就会自定按照指定的加密算法加密-->
                 <property name="hashAlgorithmName" value="MD5"/>
                   <!-- 指定循环加密次数 -->
                   <property name="hashIterations" value="1024"/>
           </bean>
      </property>
    </bean>
    <bean id="secondRealm"  class="com.test.shiro.realm.SecondRealm">
      <!--凭证匹配器,指定加密方式及加密次数-->
      <property name="credentialsMatcher">
           <bean  class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!--指定加密算法,指定之后前台传的参数就会自定按照指定的加密算法加密-->
                 <property name="hashAlgorithmName"  value="SHA1"/>
                   <!-- 指定循环加密次数 -->
                   <property name="hashIterations" value="1024"/>
           </bean>
      </property>
    </bean>
 
多个realm配置为一个认证器
<!-- 多realm认证器 -->
<bean id="authenticator"  class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
    <property name="realms">
        <list>
            <ref bean="jdbcRealm"/>
            <ref bean="secondRealm"/>
        </list>
    </property>
</bean>
 
再把认证器配置到 securityManager
<bean id="securityManager"  class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="cacheManager" ref="cacheManager"/>
    <property name="sessionMode" value="native"/>
    <!-- 多realm认证器 -->
    <property name="authenticator" ref="authenticator"/>
</bean>
 
2.认证策略,多个realm怎么样才算认证通过能,这里可以通过认证策略才实现。
既然是认证策略,那就是多realm的才能使用,根据 Shiro认证流程1_调用自定义realm中流程图可以看到多realm调用ModularRealmAuthenticator下的doMultiRealmAuthentication()方法,认证策略就是在这个方法中获取到。
AuthenticationStrategy 接口的默认实现:
  • FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第一个 Realm 身份验证成功的认证信息,其他的忽略;
  • AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信息;
  • AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功的认证信息,如果有一个失败就失败了。
ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy策略
IOC容器中配置:
     <!-- 多realm认证器 -->
     <bean id="authenticator"  
           class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
           <property name="realms">
                <list>
                     <ref bean="jdbcRealm"/>
                     <ref bean="secondRealm"/>
                </list>
           </property>
           <!-- 修改认证策略 -->
           <property name="authenticationStrategy">
                <bean  class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"/>
           </property>
     </bean>
 
 
源码流程:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值