Shiro 多Realm验证和认证策略(七)

查看源代码ModularRealmAuthenticator类

Shiro 多Realm验证和认证策略(七)_第1张图片

再添加一个SecondShiroRealm类

Shiro 多Realm验证和认证策略(七)_第2张图片

	//修改,用用户名作为盐值哦!
		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配置文件

Shiro 多Realm验证和认证策略(七)_第3张图片

Shiro 多Realm验证和认证策略(七)_第4张图片


运行断点调试

Shiro 多Realm验证和认证策略(七)_第5张图片

Shiro 多Realm验证和认证策略(七)_第6张图片

Shiro 多Realm验证和认证策略(七)_第7张图片

Shiro 多Realm验证和认证策略(七)_第8张图片

再修改SecondShiroRealm类中的密码不正确,用户名用SecondRealmName

Shiro 多Realm验证和认证策略(七)_第9张图片

运行调试查看

Shiro 多Realm验证和认证策略(七)_第10张图片

查看到有两个策略

Shiro 多Realm验证和认证策略(七)_第11张图片

可以登录成功!

Shiro 多Realm验证和认证策略(七)_第12张图片

(二)application.xml文件配置 AllSuccessfulStrategy策略

Shiro 多Realm验证和认证策略(七)_第13张图片

查看如下所示

Shiro 多Realm验证和认证策略(七)_第14张图片

SecondShiroRealm是登录失败!

Shiro 多Realm验证和认证策略(七)_第15张图片


(三)application.xml文件配置 FirstSuccessfulStrategy策略

Shiro 多Realm验证和认证策略(七)_第16张图片

调试查看

Shiro 多Realm验证和认证策略(七)_第17张图片

运行

Shiro 多Realm验证和认证策略(七)_第18张图片

总结: 

AuthenticationStrategy 接口的默认实现:

1) FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第一个 Realm 身份验证成功的认证信息,其他的忽略;
2) AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信息;
3) AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有Realm身份验证成功的认证信息,如果有一个失败就失败了。
注意:ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy策略


你可能感兴趣的:(shiro)