多重認證是操作的是多個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" />
<!-- 加密的次數(shù),默認是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" />
<!-- 加密的次數(shù)宫峦,默認是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" />
<!-- 加密的次數(shù)妥曲,默認是1次 -->
<property name="hashIterations" value="1024"/>
</bean>
</property>
</bean>
二贾费、認證策略
策略 | 意義 |
---|---|
AllSuccessfulStrategy | 所有都滿足的情況 |
AtLeastOneSuccessfulStrategy(默認) | 至少一條滿足的情況 |
FirstSuccessfulStrategy | 第一條滿足的情況 |