shiro认证机制及认证原理

2023-10-26

转自:

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的验证通过了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shiro认证机制及认证原理 的相关文章

随机推荐

  • c++:继承(超详解)

    目录 一 什么是继承 二 继承的格式 继承的总结 二 子类和父类 基类和派生类 1 子类和父类的相互赋值 2 同名的成员变量 3 同名成员函数 三 子类中默认的成员函数 1 构造函数 2 析构函数 3 拷贝构造 4 赋值运算符重载 四 单继
  • 数组中和为0的三个数

    给你一个整数数组 nums 判断是否存在三元组 nums i nums j nums k 满足 i j i k 且 j k 同时还满足 nums i nums j nums k 0 请你返回所有和为 0 且不重复的三元组 注意 答案中不可以
  • 正六边形旋转实现

    1 行内样式 div style background none div
  • Jenkins :添加node权限获取凭据、执行命令

    拥有Jenkins agent权限的账号可以对node节点进行操作 通过添加不同的node可以让流水线项目在不同的节点上运行 安装Jenkins的主机默认作为master节点 1 Jenkins 添加node获取明文凭据 通过添加node节
  • UDF、UDAF和UDTF开发模板

    0 背景 Hive是一种构建在Hadoop上的数据仓库 Hive把SQL查询转换为一系列在Hadoop集群中运行的MapReduce作业 是MapReduce更高层次的抽象 不用编写具体的MapReduce方法 Hive将数据组织为表 这就
  • 树莓派4B系统搭建---2021-8-12

    文章目录 前言 一 系统安装 1 下载系统 2 制作系统SD卡 开启SSH 树莓派系统配置 网络配置 二 使用步骤 1 引入库 2 读入数据 总结 前言 树莓派 英语 Raspberry Pi 是基于Linux的单片机电脑 由英国树莓派基金
  • 换脸视频怎么做出来的?AI视频换脸教程【完整版手把手】免费AI换脸视频工具制作过程详解

    上期分享了wav2lip GFPGan图片说话转视频的文章 超写实虚拟数字人再升级 Wav2Lip GFPGAN完整版教程及效果视频评测 手把手 baoxueyuan的博客 CSDN博客 部分饱子好奇视频如何换脸 因为近期视频换脸太火爆了
  • vs2012远程调试(可用)

    vs2012远程调试功能的改进 分类 vs2012 vs远程调试 2014 01 22 17 49 75人阅读 评论 0 收藏 举报 vs2012 vs 不知道大家有没有遇到过这种情况 刚开发完的程序 明明在本机能够好好的运行 可是部署到服
  • 教你如何搭建一个自动化构建的博客

    前言 记得在1年之前搭建了一个个人主页的博客 但是当时功力尚浅 每次写博客 都是自己手动写html 这样会变得非常的繁琐 现在很多人用主流的wordpress hexo之类的快速搭建一个平台 那些工具确实方便 但是对于主题以及一些额外的排版
  • Fabric搭建错误

    fabric搭建错误解决 在搭建fabric环境时 byfn sh up 时遇到错误Error error getting endorser client for channel endorser client failed to conn
  • 解决:component COMDLG32.OCX or one of…和 MSCOMCTL.OCX or one of...的解决方法

    遇到的问题 在做CTF题目 使用16进制转图片工具 出现了两个报错 解决方法 第一步 下载COMDLG32 OCX 程序 可以去官网 也可也使用我的百度网盘 http 链接 https pan baidu com s 1 1KNgqrxPA
  • 走过2011

    走过2011 时间飞逝 2011不寻常的一年还剩下短短5天 三百天的生活与工作是一份平淡一份快乐 工作需要总结 生活也要总结 日子才会越来越好 2011是进入公司的第二年 公司开发人员有来有离 我没有离开 因为我不喜欢跳槽 但我不跳槽的主要
  • Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from

    程序在编译时报错 在执行合并AndroidMainfest时报Attribute application appComponentFactory value android support v4 app CoreComponentFacto
  • Property ‘xxx‘ does not exist on type ‘xxx‘报错解决

    用ts写一个组件的时候 遇到了Property increment does not exist on type Add 的红点儿报错 但神奇的是竟然还能正常运行 在参考一些正确的代码后 有两个解决方案 在export default cl
  • P1048 采药(C++)---01背包(动态规划)解题

    题目描述 辰辰是个天资聪颖的孩子 他的梦想是成为世界上最伟大的医师 为此 他想拜附近最有威望的医师为师 医师为了判断他的资质 给他出了一个难题 医师把他带到一个到处都是草药的山洞里对他说 孩子 这个山洞里有一些不同的草药 采每一株都需要一些
  • MathJax 3 配置和上手渲染数学公式及在Vue中的使用

    mathjax是一个用于latex mathml和ascimath表示法的开源javascript显示引擎 mathjax的3 0版是对mathjax的彻底重写 实现了组件化 可以实现不同需求的定制 使用和配置与mathjax2版本有很大的
  • 【redis】Redis cluster是AP架构还是CP架构?

    最近刚好在看CAP理论 加上之前分析的redis cluster 就在想redis的cluster是什么模式的 AP还是CP 首先还是简单讲下CAP 具体的可见 CAP分别是 强一致性 Consistency 可用性 Availabilit
  • 地址栏参数隐藏

    1 result type 的redirectAction改为chain 但要注意如果是登录方法 权限拦截器中就可能会影响 2 将参数放到作用域中 比如session 注意 1 这样的注释是没用的
  • 网络编程13——epoll事件模型:ET和LT模、掌握实现epoll的ET模式(非阻塞模式

    epoll是linux下多路复用IO select poll 的增强版本 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 因为它会复用文件描述符集合来传递结果为不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文
  • shiro认证机制及认证原理

    转自 shiro认证机制 认证原理 下文笔者将讲述shiro的认证机制及认证原理 如下所示 Shiro认证 验证用户身份的过程 在认证过程中 用户需要提交实体信息 Principals 和凭据信息 Credentials 以检验用户是否合法