多个Realm实现
实现原理:
当应用程序配置多个Realm时,例如:用户名密码校验、手机验证码校验等等
Shiro的ModularRealmAuthenticator会使用内部的AuthenticationStrategy组件判断认证成功还是失败
shiro的三种认证策略
认证策略实际上是AuthenticationStrategy这个接口,它有三个实现:
(1) FirstSuccessfulStrategy:第一个Realm验证成功,整体认证视为成功
(2) AtLeatOneSuccessfulStrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy不同,将
返回所有Realm身份校验成功的认证信息。
(3) AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份认证成功的认证信息
在shiro的配置类中注入securitymanager
@Bean
public DefaultWebSecurityManager defaultWebSecurityManager() {
//1、创建对象
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
//2、创建认证对象,并设置认证策略
ModularRealmAuthenticator modularRealmAuthenticator=new ModularRealmAuthenticator();
modularRealmAuthenticator.setAuthenticationStrategy(new AllSuccessfulStrategy());
defaultWebSecurityManager.setAuthenticator(modularRealmAuthenticator);
//3、封装Realm集合
List<Realm> myRealms=new ArrayList<>();
myRealms.add(myRealm);
myRealms.add(myRealm1);
//4、将myReal存入defaultWebSecurityManager中
defaultWebSecurityManager.setRealms(myRealms);
defaultWebSecurityManager.setRealm(myRealm);
//5、返回
return defaultWebSecurityManager;
}