什么是shiro

shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。

spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。

shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。

使用shiro实现系统的权限管理,有效提高开发效率,从而降低开发成本。

shiro架构

subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。

securityManager:安全管理器,主体进行认证和授权都是通过securityManager进行。

authenticator:认证器,主体进行认证最终通过authenticator进行的。

authorizer:授权器,主体进行授权最终通过authorizer进行的。

sessionManager:web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。

SessionDao: 通过SessionDao管理session数据,针对个性化的session数据存储需要使用sessionDao。

cache Manager:缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。

realm:域,领域,相当于数据源,通过realm存取认证、授权相关数据。

注意:在realm中存储授权和认证的逻辑。

cryptography:密码管理,提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。

比如 md5散列算法。

认证过程

认证执行流程

1、通过ini配置文件创建securityManager

2、调用subject.login方法主体提交认证,提交的token

3、securityManager进行认证,securityManager最终由ModularRealmAuthenticator进行认证。

4、ModularRealmAuthenticator调用IniRealm(给realm传入token) 去ini配置文件中查询用户信息

5、IniRealm根据输入的token(UsernamePasswordToken)从 shiro.ini查询用户信息,根据账号查询用户信息(账号和密码)

​ 如果查询到用户信息,就给ModularRealmAuthenticator返回用户信息(账号和密码)

​ 如果查询不到,就给ModularRealmAuthenticator返回null

6、ModularRealmAuthenticator接收IniRealm返回Authentication认证信息

​ 如果返回的认证信息是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException)

​ 如果返回的认证信息不是null(说明inirealm找到了用户),对IniRealm返回用户密码 (在ini文件中存在)

授权流程

**

**

1、对subject进行授权,调用方法isPermitted(“permission串”)

2、SecurityManager执行授权,通过ModularRealmAuthorizer执行授权

3、ModularRealmAuthorizer执行realm(自定义的Realm)从数据库查询权限数据

调用realm的授权方法:doGetAuthorizationInfo

4、realm从数据库查询权限数据,返回ModularRealmAuthorizer

5、ModularRealmAuthorizer调用PermissionResolver进行权限串比对

6、如果比对后,isPermitted中"permission串"在realm查询到权限数据中,说明用户访问permission串有权限,否则 没有权限,抛出异常。

shiro原理及其运行流程介绍相关推荐

  1. MR的原理和运行流程

    文章目录 MR的原理和运行流程 Map的运行过程 Reduce处理过程 Shuffle过程 MR运行过程 Yarn && Job MR的原理和运行流程 Map的运行过程 以HDFS上的 ...

  2. OpenCart框架运行流程介绍opencart资料链接

    opencart 主要文件夹结构和文件说明 opencart 单入口文件简单分析 opencart中文使用手册 opencart 模块开发详解 OpenCart源码目录结构详解 opencart中的l ...

  3. springboot中缓存技术的使用、原理及其运行流程

    Springboot中缓存的工作原理 要想在springboot中使用缓存,首先要了解springboot中缓存的工作原理. 我们知道springboot在启动时会有很多的自动配置类(xxx-Auto ...

  4. python threading condition使用_Python threading模块condition原理及运行流程详解

    Condition的处理流程如下: 首先acquire一个条件变量,然后判断一些条件. 如果条件不满足则wait: 如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wa ...

  5. python执行过程_Python threading模块condition原理及运行流程详解

    Condition的处理流程如下: 首先acquire一个条件变量,然后判断一些条件. 如果条件不满足则wait: 如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wa ...

  6. java controller注解原理_SpringMVC运行流程与原理【Controller接口实现注解实现】

    MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据.显示分离的方法来组织代码. MVC主要作用是降低了视图与业务逻辑间的双向偶 ...

  7. ARKit从入门到精通(2)-ARKit工作原理及流程介绍

    转载请注明出处:ARKit从入门到精通(2)-ARKit工作原理及流程介绍 1.1-写在前面的话 1.2-ARKit与SceneKit的关系 1.3-ARKit工作原理 1.3.1-ARSCNView ...

  8. python爬虫流程-Python爬虫程序架构和运行流程原理解析

    1 前言 Python开发网络爬虫获取网页数据的基本流程为: 发起请求 通过URL向服务器发起request请求,请求可以包含额外的header信息. 获取响应内容 服务器正常响应,将会收到一个res ...

  9. Apache Shiro的运行流程和权限控制方式分析

    Apache Shiro的运行流程和权限控制方式分析 Shiro的架构有3个主要的概念: Subject SecurityManager Realms 下面的关系图是关于这些组件是如何交互的高级概述. ...

  10. Python爬虫之Scrapy框架系列(1)——初识Scrapy框架【安装+简介+运行流程+组件介绍】

    目录: 1.Scrapy模块安装 2.Scrapy框架简介 2.1 Scrapy是个啥? 2.2 我们为啥要用这玩意呢? 3.运行流程 3.1 引入: 3.2 进入正题: 3.3 数据流: 3.4 中 ...

最新文章

  1. 树状数组 ---- 树状数组+动态维护前缀中位数 D. Omkar and Medians
  2. 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一
  3. MyEclipse优化设置(最详细版本)
  4. 2019计算机科学与技术全日制调济,2019年华侨大学计算机科学与技术学院全日制学术型研究生调剂信息(第三批)...
  5. squirrel-foundation-demo
  6. Android BitmapShader 实战 实现圆形、圆角图片
  7. display属性_Numpy知识点(1)讲解实操安装/属性/数组创建/运算
  8. SCSM 2012 SP1创建SCOM连接器
  9. div css网页设计源代码_HTML+CSS网页设计,企业网站服务项目布局样式
  10. linux 开机 找不到 文件系统 下载文件系统就好了,开机启动找不到文件系统的修复步骤...
  11. PHP时间戳和日期转换
  12. 快递100支持的物流公司
  13. spreadJS初体验
  14. Download a file from Google Drive
  15. 从高中编码员到国际技术演讲者— Arun Michael Dsouza访谈
  16. “丧偶式”恋爱?博士男友每晚12点才回家,要分手吗......
  17. 2o2021年安徽高考成绩查询,2021安徽高考数学答案-2021年安徽高考数学试题及答案...
  18. 电池续航智能穿戴设备突破瓶颈
  19. 操作Oracle类型CLOB和BLOB
  20. 从细节最初判断一家公司

热门文章

  1. 【PS功能学习】10:蒙版带你领略台前幕后的故事
  2. 简述人工智能的发展历程图_人工智能的历程、现状及未来发展趋势
  3. zigbee网络各层的主要功能
  4. C语言基础(七)字符串 类型重定义 结构体
  5. 机器学习:线性SVM损失函数转换拉格朗日乘数
  6. border属性的三要素
  7. 证件照如何换背景颜色?这几个软件能免费帮你们制作证件照
  8. 【模型选择】从0到1的数据价值实现需要数据分析师做些什么?
  9. 用CSS实现对话气泡框!
  10. matlab怎么做线性插值,[MATLAB]领域插值和线性插值