• shiro认证机制及认证原理


    转自:

    shiro认证机制,认证原理

    下文笔者将讲述shiro的认证机制及认证原理,如下所示:

    Shiro认证:
        验证用户身份的过程
      在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法
     如:“用户名/密码”组合
    

    shiro认证原理

    1、首先应用程序构建了一个终端用户认证信息的AuthenticationToken
       然后运行Subject.login方法
    2、Sbuject的实例通常是DelegatingSubject类(或子类)的实例对象
       在认证开始时,会委托应用程序设置的securityManager实例调用securityManager.login(token)方法 
    3、SecurityManager接受到token(令牌)信息后会委托内置的Authenticator的实例(通常都是ModularRealmAuthenticator类的实例)
       调用authenticator.authenticate(token). 
        ModularRealmAuthenticator在认证过程中会对设置的一个或多个Realm实例进行适配
         它实际上为Shiro提供了一个可拔插的认证机制
    4、当在应用程序中配置了多个Realm
        ModularRealmAuthenticator会根据配置的AuthenticationStrategy(认证策略)来进行多Realm的认证过程
        当Realm被调用后,AuthenticationStrategy将对每一个Realm的结果作出响应
    注:如果应用程序中仅配置了一个Realm,Realm将被直接调用而无需再配置认证策略
    5、判断每一个Realm是否支持提交的token
        如果支持,Realm将调用getAuthenticationInfo(token);
         getAuthenticationInfo方法就是实际认证处理,我们通过覆盖Realm的doGetAuthenticationInfo方法来编写我们自定义的认证处理
    

    Shiro认证过程

    收集实体/凭据信息

        //用户名 密码校验
    UsernamePasswordToken?token?=?new?UsernamePasswordToken(username,?password);
        //开启"记得我"功能
    token.setRememberMe(true);
    UsernamePasswordToken支持最常见的用户名/密码的认证机制
         同时,由于它实现了RememberMeAuthenticationToken接口
    	   我们可以通过令牌设置“记住我”的功能,已记住的用户仅仅是非匿名用户
    	   你可以通过subject.getPrincipals()获取用户信息。但是它并非是完全认证通过的用户
    	   当你访问需要认证用户的功能时,你仍然需要重新提交认证信息
    
    2、提交实体/凭据信息
    Subject currentUser = SecurityUtils.getSubject();  
         currentUser.login(token);  
    收集了实体/凭据信息之后,我们可以通过SecurityUtils工具类,获取当前的用户,然后通过调用login方法提交认证。
    
    3、认证处理
    try{
        currentUser.login(token);
    }catch(UnknownAccountException?uae?){
         }catch(AuthenticationException?ae?){//error
    }
    如果login方法执行完毕且没有抛出任何异常信息,那么便认为用户认证通过。之后在应用程序任意地方调用SecurityUtils.getSubject() 都可以获取到当前认证通过的用户实例,使用subject.isAuthenticated()判断用户是否已验证都将返回true.?
    
    至此shiro的验证通过了
  • 相关阅读:
    Spring Web Flow 2 中流管理的持久化
    重组模型系统
    Dubbo高手之路6,Dubbo 服务治理详解
    docker启动rabbitmq及使用
    一文了解硬盘AFR年化故障率评估方式和预测方案
    NAT网络地址转换实验(思科)
    短视频素材怎么做?视频素材库那个好?
    2022-07-30 mysql8执行慢SQL[Q17]分析
    前端项目规范化
    数据仓库数据集成开源工具
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/126006586