当前位置: 首页 > article >正文

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拥有的角色或资源是否包括传入的参数。


http://www.kler.cn/a/15344.html

相关文章:

  • 数据库基本概念学习笔记
  • WTV芯片在智能电子锁语音留言上的应用方案解析
  • ubuntu显示管理器_显示导航栏
  • 本草智控:中药实验管理的智能时代
  • 嘴尚绝卤味独特的口感
  • C++内存管理 - new/delete
  • 获取Tree 树形控件下面的全部id
  • 小米青春版路由器刷openwrt
  • UE5实现Runtime环境下绘制点功能
  • 201709-1 打酱油
  • 基于dsp+fpga+AD+ENDAC的半导体运动台高速数据采集电路仿真设计(四)
  • Qt5.9学习笔记-事件(一)
  • 从线程安全到锁粒度,使用Redis分布式锁的注意事项
  • 【NLP实战】基于Bert和双向LSTM的情感分类【上篇】
  • C#简单向:textbox添加提示内容
  • APK文件结构
  • 成功上岸国防科大!
  • 【22-23 春学期】人工智能基础--AI作业6-误差反向传播
  • 大数据管理中心规划设计方案(ppt可编辑)
  • Centos编译安装python3.9.0
  • 【IT 常识】安装(Install)、部署(Deploy)、搭建(Setup)和配置(Configure、Set)的区别
  • Selenium:WebDriver简介及元素定位
  • 人人都能用,3s学会加密你的网址变成ooo
  • LVS+Keepalived群集
  • 第三节:支持向量机分类预测
  • 【论文精度(李沐老师)】Deep Residual Learning for Image Recognition