Shiro相关知识

简介: Shiro

1、Shiro功能概述

Apache Shiro是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。

主要功能:

  • Authentication:身份认证。登录时验证身份信息。
  • Authorization:授权操作。访问控制的过程,即确定“谁”有权访问“什么”。
  • SessionManager:会话管理。这的Session并不是我们的HttpSession。
  • Cryptography:加密。使用加密算法确保数据安全。

扩展功能:

  • Web Suppot:对于Web的支持,可以更简易的集成 Web 项目。
  • Caching:缓存。登录授权后,把用户信息缓存起来,这样就不用每次都去数据库中查询,提高效率。
  • Concurrency:并发性。通过其并发功能支持多线程应用程序。
  • Testing:支持测试。
  • Run As允许用户采用其他用户的标识(如果允许)的功能。
  • Remember Me记住用户跨会话的身份,只需要在强制登录时登录。

2、Shiro的三大核心

掌握核心点对使用Shiro有很大的帮助:

整个流程就是:应用代码通过 Subject 来进行认证和授权,而 Subject 又委托给 SecurityManager;我们需要给 Shiro 的 SecurityManager 注入 Realm,从而让 SecurityManager 能得到合法的用户及其权限进行判断。

Subject:主体,代表了当前 “用户”,这个“用户”是一个抽象的概念,它也可以是第三方程序,大体理解为任何与系统交互的“东西”都可以称为Subject。所有 Subject 都绑定到 SecurityManager,与 Subject 的所有交互都会委托给 SecurityManager;可以把 Subject 认为是一个门面;SecurityManager 才是实际的执行者;

SecurityManager:安全管理器;它管理着所有 Subject;可以看出它是 Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过 SpringMVC,你可以把它看成 DispatcherServlet 前端控制器;

Realm:领域,Shiro 从Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作。

3、RBAC的概念

RBAC(Role-Based Access Control)就是基于角色的访问控制。三要素就是用户、角色、权限,概括来说就是用户拥有什么角色,这些角色被分配了哪些操作权限。后续案例中其实是最简单的一种数据模型,实际项目中还会存在部门、用户组啥的。

4、身份认证流程

大体看一下流程有助于我们后续搭建项目。

  1. 应用程序代码调用 Subject.login(token) 方法,这里要传入AuthenticationToken 。
  2. 将 Subject 实例委托给应用程序的 SecurityManager,实际身份验证工作开始
  3. 委托给封装的验证器进行身份验证。authenticator.authenticate(token)
  4. 通过回调AuthenticationStrategy来执行多域身份验证尝试,需要注意的是只要一个Realm时是不需要这个的
  5. 从图中可以看到我们可以Custom Realm(自定义Realm),将传入的AuthenticationToken和Realm匹配,成功匹配后会创建一个subject实例。

5、授权流程

  1. 当调用subject.hashRole*/checkRole*/isPermitted*/checkPermission*方法,传入相应参数。
  2. 仍然委托给Security Manager
  3. SecurityManager通过Authorizer的hashRole*/checkRole*/isPermitted*/checkPermission*方法验证是否拥有角色或资源
  4. Authorizer类hasRole方法内通过AuthorizingRealm的getAuthorizationInfo获取角色信息,AuthorizingRealm最后通过调用子类的doGetAuthrizationInfo获取用户角色集合,在通过集合的contains方法判断角色。】

大体意思也就是最后它会去我们自定义Realm中查找subject拥有的角色或资源是否包括传入的参数。

相关文章
|
4月前
|
SQL 关系型数据库 MySQL
Quick BI使用案例16:利用“SQL预聚合+图表二次汇总”实现最大值求和
本文详解如何通过自定义SQL预聚合结合仪表板二次汇总(列小计求和),突破SUM(MAX())嵌套限制,实现“各区域各类运输方式最大订单额求和”,助力识别高价值客户与优化高端物流策略。
|
设计模式 机器学习/深度学习 SQL
软考高级系统架构设计师通关经验分享
为什么考系统架构设计师是国家设立的计算机技术与软件专业技术资格考试(简称软考)中的一个高级科目,属于工程师高级职称系列,具有一定含金量。浙江省每年通过软考高级的人数约为1000+人,其中系统架构设计师科目的通过人数约为200+人。从学习角度来说,通过准备系统架构设计师的考试的过程,可以查漏补缺,并且了解一些系统架构设计相关的基础知识,实现一定程度上的自我提升;从目的性的角度来说,通过考试,可以在一
16050 5
软考高级系统架构设计师通关经验分享
|
12月前
|
存储 人工智能 Android开发
为什么微信发送的APP安装不了,.apk转化为.apk.1
微信发送的APP文件常被改为.apk.1格式导致无法安装,推荐使用夸克或QQ浏览器解决。
1897 14
|
人工智能 自然语言处理 Kubernetes
导演、编剧、特效师都要失业?生成式AI正在悄悄重塑影视工业
导演、编剧、特效师都要失业?生成式AI正在悄悄重塑影视工业
557 0
|
Java 网络安全 数据安全/隐私保护
主流SSH远程连接客户端——MobarXterm安装教程
本文介绍了从FinalShell转向MobarXterm的原因及使用体验,详细对比了当前主流SSH客户端,推荐使用MobarXterm。文章还提供了MobarXterm的安装步骤、基本配置方法,包括设置默认编辑器、配置右键粘贴、SSH配置、关闭X-Server服务以及SFTP文件传输功能的使用。
1781 1
主流SSH远程连接客户端——MobarXterm安装教程
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
394 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
vs2019使用静态库
vs2019使用静态库
668 0
|
机器学习/深度学习 人工智能 自然语言处理
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-06
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-06
|
前端开发 JavaScript API
前端的全栈之路Meteor篇(完):关于前后端分离及与各框架的对比,浅析分离之下的潜在耦合
本文探讨了Meteor.js这一全栈JavaScript框架的特点与优势,特别是在前后端分离架构中的应用。Meteor通过共享数据结构和简化全栈开发流程,实现了前后端的紧密协作。文章还对比了其他全栈框架,如Next.js、Nuxt.js等,分析了各自的优势与适用场景,最后讨论了通过定义文档归属者和用户专有数据集简化后端构建及端云数据同步的方法。
1330 0
github下载的.ipynb文件报错unreadable Notebook NotJSONError
【8月更文挑战第2天】文章提供了解决GitHub下载的Jupyter Notebook文件打开时报错的方法,包括端口冲突和文件加载错误。
559 0
github下载的.ipynb文件报错unreadable Notebook NotJSONError