Shiro多Realm认证

多重认证是操作的是多个Realm。第一种方式是,在ModularRealmAuthenticator里面可以配置多个Reamls,默认的验证策略是,至少一个满足即可(AtLeastOneSuccessfulStrategy)。建议将多Realm配置在DefaultWebSecurityManager ,将验证策略和Reaml分开来管理,也就是下面,多重认证的第二种方式。

一、多重认证

多重认证,主要的类是ModularRealmAuthenticator,他有两个需要配置的属性,一个是Collection(用于存储Realm),另一个是AuthenticationStrategy(用于存储验证的策略 )。


第一种:配置在ModularRealmAuthenticator

下面代码,配置了两个Reamls,第一个使用的是MD5码表,第二个是 SHA1的加密,验证的策略是两个都必须满足才可以让你登录。

    <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
        <!-- 缓存管理器 -->
        <property name="cacheManager" ref="cacheManager" />  

        <!-- 验证 -->        
        <property name="authenticator" ref="authenticator"/>
    </bean>  

    <!-- 配置多个 realm -->
    <bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
        <property name="authenticationStrategy" >
            <bean class="org.apache.shiro.authc.pam.AllSuccessfulStrategy"/>
        </property>
        <!-- 多个验证策略 realmes -->
        <property name="realms">
            <list>
                <!-- 这个认证,有一个先后的顺序 -->
                <ref bean="sampleRealm1"/>
                <ref bean="sampleRealm2"/>
            </list>
        </property>
    </bean>

    <!-- 授权 认证 ,自己定义的,领域(Realm),shiro需要配置一个领域(Realm),以便我们可以访问用户-->
    <bean id="sampleRealm1" class=" com.yellowcong.shior.realm.SampleRealm" >

        <!-- 如果不加入密码匹配的操作,密码就不会存在 -->
        <!-- 加入了密码匹配器之后,就会默认将前台传递过来的密码自动MD5加密 -->
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!-- 加密的方式 -->
                <constructor-arg index="0" type="java.lang.String" value="MD5" />
                <!-- 加密的次数,默认是1次 -->
                <property name="hashIterations" value="1024"/>
            </bean>
        </property>
    </bean>
第二种:配置在DefaultWebSecurityManager(推荐)
    <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
        <!-- 缓存管理器 -->
        <property name="cacheManager" ref="cacheManager" />  

        <!-- 验证 -->        
        <property name="authenticator" ref="authenticator"/>

        <!-- 多个验证策略 realmes -->
        <property name="realms">
            <list>
                <!-- 这个认证,有一个先后的顺序 -->
                <ref bean="sampleRealm1"/>
                <ref bean="sampleRealm2"/>
            </list>
        </property>
    </bean>  

    <!-- 授权策略 -->
    <bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
        <property name="authenticationStrategy" >
            <bean class="org.apache.shiro.authc.pam.AllSuccessfulStrategy"/>
        </property>
    </bean>

    <!-- 授权 认证 ,自己定义的,领域(Realm),shiro需要配置一个领域(Realm),以便我们可以访问用户-->
    <bean id="sampleRealm1" class=" com.yellowcong.shior.realm.SampleRealm" >

        <!-- 如果不加入密码匹配的操作,密码就不会存在 -->
        <!-- 加入了密码匹配器之后,就会默认将前台传递过来的密码自动MD5加密 -->
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!-- 加密的方式 -->
                <constructor-arg index="0" type="java.lang.String" value="MD5" />
                <!-- 加密的次数,默认是1次 -->
                <property name="hashIterations" value="1024"/>
            </bean>
        </property>
    </bean>


    <!-- 授权 认证 ,自己定义的,领域(Realm),shiro需要配置一个领域(Realm),以便我们可以访问用户-->
    <bean id="sampleRealm2" class=" com.yellowcong.shior.realm.SampleRealm2" >

        <!-- 如果不加入密码匹配的操作,密码就不会存在 -->
        <!-- 加入了密码匹配器之后,就会默认将前台传递过来的密码自动SHA1加密 -->
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!-- 加密的方式 -->
                <constructor-arg index="0" type="java.lang.String" value="SHA1" />
                <!-- 加密的次数,默认是1次 -->
                <property name="hashIterations" value="1024"/>
            </bean>
        </property>
    </bean>

二、认证策略

策略 意义
AllSuccessfulStrategy 所有都满足的情况
AtLeastOneSuccessfulStrategy(默认) 至少一条满足的情况
FirstSuccessfulStrategy 第一条满足的情况
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。