zoukankan      html  css  js  c++  java
  • Shrio多Realm认证及认证策略

    在大型的系统中,安全数据可能会存放在多个数据库中,而且每个数据的加密方式也是不一样的,那么单一的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的属性。
  • 相关阅读:
    Python super() 函数
    Python中的多继承
    sub eax, _PAGESIZE; decrease by PAGESIZE test dword ptr [eax],eax ; probe page
    ubuntu中的samba配置
    linux 相关命令
    Program Size: Code=x RO-data=x RW-data=x ZI-data=x 的含义
    结构之法,算法之道:程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
    C++ 构造函数和析构函数
    C++ 友元函数总结
    C++ 动态存储空间的分配和释放 new与malloc的区别
  • 原文地址:https://www.cnblogs.com/startcaft/p/7263049.html
Copyright © 2011-2022 走看看