在大型的系统中,安全数据可能会存放在多个数据库中,而且每个数据的加密方式也是不一样的,那么单一的Realm就无法完成。
这时,就需要用到多Realm认证了,多Realm又涉及到认证策略,及在多个Realm认证的时候,怎么样的规则才算认证通过。
 
还是通过源码来看一下多Realm和认证策略:
1,Subject 组件的login(AuthenticationToken)方法:
  

2,实际上调用的是 SecurityManager 组件的 login方法,SecurityManager的内部有一个属性 Authenticator ,它的默认实现类为 ModularRealmAthenticator
  

  

  

     
     
3,调用 Authenticator 认证器组件的 authenticate(AuthenticationToken)方法:
  

     
4,默认的认证器实现类会根据获取到的Realm个数来决定调用什么方法进行认证:
  

     
5,多Realm认证会获取一个认证策略对象,AuthencationStrategy
  

     
6,认证策略说明,Shiro提供了3个具体的 AuthenticationStrategy 实现:
     [1]AtLeastOneSuccessfulStrategy
          如果一个(或更多)验证成功,则整体的尝试被认为是成功的。如果没有一个验证成功,则整体失败。说白了就是,至少有一个Realm的验证是成功的算才认证通过,否则认证失败。
     [2]FirstSuccessfulStrategy
          第一个Realm成功验证返回的信息将被使用,其他的Realm将被忽略。如果没有一个Realm验证成功,则整体失败。
     [3]AllSuccessfulStrategy
          所有配置的Realm都必须验证成功才算认证通过,否则认证失败。
 
7,默认认证器 ModularRealmAuthenticator 的默认认证策略 AtLeastOneSuccessfulStrategy 。
  

     
 
 
多Realm认证总结:
1,配置一个认证器的bean,实现类为 ModularRealmAuthenticator 。
2,为认证器配置多个Realm的bean。
3,配置SecurityManager的bean,为其注入配置的认证器的bean。
4,如果需要改变默认的认证策略,还必须配置一个认证策略的bean,然后注入给认证器的bean的属性。

最新文章

  1. .Net中的AOP系列之《拦截位置》
  2. linux几个常用的命令及获取帮助的方法
  3. 应用程序调试工具gdb,王明学learn
  4. poj3468 A Simple Problem with Integers (线段树区间最大值)
  5. linux下OpenCV的安装配置
  6. GRIB格式转换心得(转自博客:http://windforestwing.blog.163.com/blog/static/19545412007103084743804/)
  7. javascript小数四舍五入
  8. Java学习笔记--Socket和ServerSocket
  9. LINQ to SQL和Entity Framework对比与关联 (转载)
  10. 在GlassFish应用服务器上创建并运行你的第一个Restful Web Service【翻译】
  11. pyqt5实现打开子窗口
  12. VS2008中 ATL CLR MFC Win32 区别
  13. 【原创】大数据基础之Kerberos(2)hive impala hdfs访问
  14. linux学习:【第3篇】远程连接及软件安装
  15. flask 定义数据库关系(一对一)
  16. python修改文件中字符串并写入
  17. function CONVERSION_EXIT ****INPUT/OUTPUT说明
  18. mysql防注入
  19. spring boot(18)-servlet、filter、listener
  20. PAT 1087 All Roads Lead to Rome

热门文章

  1. Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)
  2. 重写QLineEdit,实现编辑框内添加删除按钮的功能(随时把控件Move到一个地方,然后show就可以了,这是万能的办法)
  3. Delphi访问活动目录(使用COM,活动目录Active Directory是用于Windows Server的目录服务)
  4. 实现Qt日志功能并输出到文件(使用qInstallMsgHandler安装customMessageHandler)good
  5. kafka设计原理(转)
  6. 3014C语言_运算符
  7. Python基础,day1
  8. Oracle 数据库表中已有重复数据添加唯一键(唯一约束)
  9. meta 详解
  10. CentOS7.3安装JIRA7.10