1、多Realm配置和认证策略的配置
配置多个realm以及认证策略
1、配置securityManager的realms属性下配置多个realm
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager" >
<property name="cacheManager" ref="cacheManager"></property>
<!-- 在realms属性中配置多个realm-->
<property name="realms">
<list>
<!-- myRealm(MD5加密)、myRealm2(SHA1加密)均为Realm接口的实现类 -->
<ref bean="myRealm"></ref>
<ref bean="myRealm2"></ref>
</list>
</property>
</bean>
2、通过ModularRealmAuthenticator类中的authenticationStrategy属性来配置响应的认证策略认证策略默认的认证策略为AtLeastOneSuccessfulStrategy
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager" >
<property name="cacheManager" ref="cacheManager"></property>
<!-- 注意authenticator要比realms先配置否则可能引发
One or more realms must be present to execute an authorization operation.
-->
<!-- 配置authenticator,认证策略及授权 -->
<property name="authenticator" ref="authenticator"></property>
<property name="realms">
<list>
<ref bean="myRealm"></ref>
<ref bean="myRealm2"></ref>
</list>
</property>
</bean>
<!-- ModularRealmAuthenticator类 -->
<bean class="org.apache.shiro.authc.pam.ModularRealmAuthenticator" id="authenticator">
<!-- 配置认证策略 -->
<!-- 默认的认证策略为:AtLeastOneSuccessfulStrategy -->
<property name="authenticationStrategy">
<bean class="org.apache.shiro.authc.pam.AllSuccessfulStrategy"></bean>
</property>
</bean>
2、认证策略
认证策略 | 效果 |
---|---|
AllSuccessfulStrategy | 所有的realm都必须认证通过,返回所有通过realm的认证信息 |
AtLeastOneSuccessfulStrategy | 至少通过一个realm认证,返回所有通过的realm的认证信息 |
FirstSuccessfulStrategy | 第一条realm通过后面的realm认证都忽略(并非不执行),只返回第一个通过条realm的认证信息 |
AllSuccessfulStrategy 效果
默认realm2认证通不过
AtLeastOneSuccessfulStrategy 效果
默认realm1认证不通过,realm2通过
FirstSuccessfulStrategy 效果
默认realm1通过认证,realm2不通过