AuthenticationStrategy(身份驗證策略)html
官方文檔:shiro.apache.org/authenticat…web
AuthenticationStrategy 是個無狀態的組件,在認證過程當中會進行4次調用。spring
- ① 在全部Realm被調用以前
- ②在調用Realm的getAuthenticationInfo方法以前
- ③在調用Realm的getAuthenticationInfo 方法以後
- ④在全部Realm被調用以後
ModularRealmAuthenticator org.apache.shiro.authc.pam.ModularRealmAuthenticatorapache
AuthenticationStrategy org.apache.shiro.authc.pam.AuthenticationStrategymarkdown
Shiro有3中認證策略的具體實現 AuthenticationStrategy類:session
- AtLeastOneSuccessfulStrategy(默認) 只要一個或者多個Realm認證經過,則總體身份認證就會視爲成功。
- FirstSuccessfulStrategy 只有第一個驗證經過,纔會視爲總體認證經過。其餘的會被忽略。
- AllSuccessfulStrategy 只有全部的Realm認證成功,纔會被視爲認證經過 自定義策略:繼承org.apache.shiro.authc.pam.AbstractAuthenticationStrategy。
- Realm順序對認證是有影響的。
spring-shiro.xml 配置 認證策略:app
<!-- Shiro默認會使用Servlet容器的Session,可經過sessionMode屬性來指定使用Shiro原生Session -->
<!-- 這裏主要是設置自定義的單Realm應用,如有多個Realm,可以使用'realms'屬性代替 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="cacheManager" ref="cacheManager"/>
<!--<property name="realm" ref="myRealm"/>-->
<property name="authenticator" ref="authenticator"/>
</bean>
<!--多個realm 配置-->
<bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
<!--配置認證策略-->
<property name="authenticationStrategy" ref="allSuccessfulStrategy"/>
<property name="realms">
<list>
<ref bean="firstRealm"/>
<ref bean="secondRealm"/>
</list>
</property>
</bean>
<!--所有經過-->
<bean id="allSuccessfulStrategy" class="org.apache.shiro.authc.pam.AllSuccessfulStrategy"/>
<!--只有第一個驗證經過,纔會視爲總體認證經過。其餘的會被忽略。-->
<bean id="firstSuccessfulStrategy" class="org.apache.shiro.authc.pam.FirstSuccessfulStrategy"/>
<!--默認-->
<bean id="atLeastOneSuccessfulStrategy" class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"/>
複製代碼