查看源代码ModularRealmAuthenticator类
再添加一个SecondShiroRealm类
//修改,用用户名作为盐值哦!
Object credentials = null;
if("mike".equals(username)){
credentials="d0cd0a759e892d34f8b7beee186c3516a6e49651";
}else if("admin".equals(username)){
credentials="cb93abd4d63540dd38e1e9d59a57e845376166aa";
}
/
// c)realmName:当前realm对象的name,调用父类的getName()方法;
String realmName = getName();
// 认证对象
//SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName);
//d)盐值
ByteSource credentialsSalt=ByteSource.Util.bytes(username);
// 认证对象
SimpleAuthenticationInfo info =new SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName);
return info;
(一)application.xml配置文件
运行断点调试
再修改SecondShiroRealm类中的密码不正确,用户名用SecondRealmName
运行调试查看
查看到有两个策略
可以登录成功!
(二)application.xml文件配置 AllSuccessfulStrategy策略
查看如下所示
SecondShiroRealm是登录失败!
(三)application.xml文件配置 FirstSuccessfulStrategy策略
调试查看
运行
总结:
AuthenticationStrategy 接口的默认实现:
1) FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第一个 Realm 身份验证成功的认证信息,其他的忽略;
2) AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信息;
3) AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功的认证信息,如果有一个失败就失败了。
注意:ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy策略