如果进项多个Realm的校验时,第一个Realm验证通过,第二个验证不通过,我们该怎么进行处理呢?这时候我们就应该使用Shiro的验证策略来解决这个问题了。
验证策略有三种:
llSuccessFulStrategy:所有Realm验证成功才算成功,且返回所有
Realm身份验证成功的认证信息,如果有一个失败就失败了。
AtLeastOneSuccessFulAtrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信息;
FirstSuccessFulStrategy:只要有一个 Realm 验证成功即可,只返回第一个 Realm 身份验证成功的认证信息,其他的忽略;
首先我们先对这三个验证策略进行一个校验,但是怎么去配置呢?
我们可以先有debug来进行设置下,然后再来配置。
Debug测试可以看出ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy策略。
为了验证AtLeastOneSuccessFulAtrategy以上的结论,我们可以在Realm中的密码进行修改,看会不会返回验证信息。
控制台信息:
如果我们把默认的验证策略进行修改下呢?
配置:
<!--多个realm的配置-->
<bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator">
<property name="realms">
<list>
<ref bean="jdbcRealm"/>
<ref bean="jdbcRealm2"/>
</list>
</property>
<property name="authenticationStrategy">
<bean class="org.apache.shiro.authc.pam.AllSuccessfulStrategy">
</bean>
</property>
</bean>
按照以上的结论,应该是会打印第一个正确的信息,第二个未被打印,而且登录失败且打印登录失败的信息,那我们就来测试下吧。
这时,也并未登录成功。说明验证符合结论的要求。