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

Shiro的架构有3个主要的概念:

Subject

SecurityManager

Realms

下面的关系图是关于这些组件是如何交互的高级概述。

我们接下来讨论下每一个概念。

Subjects:Subject实质上是一个当前执行用户的特定的安全“视图”。鉴于”User”一词通常意味着一个人,而一个Subject可以是一个人,也可以代表第三方服务,或者其他类似的任何东西–基本上是当前正在与软件进行交互的任何东西。所有Subject实例都被绑定到一个SecurityManager上,当你与一个Subject交互时,那些交互作用转化为与SecurityManager交互的特定subject的交互作用。

SecurityManager:SucerityManager是Shiro架构的心脏,并作为一种“保护伞”对象来协调内部的安全组件共同构成一个对象图。然而,一旦SecurityManager和它的内置对象图已经配置给一个应用程序,那么它单独留下来,且应用程序开发人员几乎使用他们所有的时间来处理Subject API.当你真该与一个Subject进行交互时,实质上是幕后的SecurityManager处理着所有 繁重的Subject安全操作。

Realms:Realms担当Shiro和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相关的数据,如用来执行身份验证(登录)及授权(访问控制)的用户账户交互时,Shiro从一个或多个为应用程序配置的Realm中寻找许多这样的东西。在这个意义上说,Realm本质上是一个特定安全的DAO:它封装了数据源的连接详细信息,使Shiro所需的相关的数据可用。当配置Shiro时,你必须指定至少一个Realm用来进行身份验证或授权。SecurityManager可以配置多个Realms,但至少有一个是必须的。

Application Code:也就是用户编写的代码。
用简明扼要的话总结一下:

Subject就是Shiro管理的用户;SecurityManager是安全管理器,是Shiro权限控制核心对象,在编程时,只需要操作Subject方法,底层会调用SecurityManager方法,无需直接变成操作SecurityManager;Realm是应用程序和安全数据之间的连接器。 应用程序要进行权限控制,就 需要读取数据表中的数据,也许数据并不是存储在数据表中,可能存储在文件或 网络上,但不管怎样,都是需要读取数据的,那么就一定需要通过Realms对象来读取这些安全数据。以用户登录流程为例,应用程序首先是去调用Subject,Subject去调用SecurtyManager安全管理器 ,SecurtyManager去调用Realm,Realm再去读取安全数据。

Shiro进行权限控制

主要有四种主要的方式:

在程序中,通过Subject以编程方式进行权限控制。

通过配置Filter,实现URL级别粗粒度的权限控制 。

通过配置代理,基于注解实现细粒度的权限控制。

在页面中使用shiro自定义标签实现页面显示的权限控制。

Apache Shiro的运行流程和权限控制方式分析相关推荐

  1. Spring 整合 Apache Shiro 实现各等级的权限管理

    Spring 整合 Apache Shiro 实现各等级的权限管理 2015-10-25 JAVA, SECURITY, SHIRO, SPRING Background 前几个月在做一个常规的权限隔 ...

  2. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  3. shiro实现url级别的权限控制(用户登录)配置文件分析

    shiro实现url级别的权限控制(用户登录)

  4. 爆破专栏丨Spring Security系列教程之Spring Security的四种权限控制方式

    原创:一一哥 前言: 在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是认证+授权. 在前面我们分别基于内存模型.基于默认的 ...

  5. java按钮权限控制_详解Spring Security 中的四种权限控制方式

    Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Se ...

  6. Security中常见的权限控制方式

    本文来说下Security中常见的四种权限控制方式 文章目录 概述 概述

  7. springboot shiro和freemarker集成之权限控制完全参考手册(跳过认证,登录由三方验证,全网首发)...

    本文主要考虑单点登录场景,登录由其他系统负责,业务子系统只使用shiro进行菜单和功能权限校验,登录信息通过token从redis取得,这样登录验证和授权就相互解耦了. 用户.角色.权限进行集中式管理 ...

  8. 工作流管理系统开发之六 表单权限与流程的权限控制

    在设计工作流系统的时候,常常会碰到这样的情况: 同一张表单需要在流程的多个环节中处理,且各环节的处理情况不一致,有的节点可写,有的节点之可读. 例如,同一张报销单:员工填写报销单时,只能填写报销单主体 ...

  9. 使用shiro进行系统身份验证-权限控制,登录界面乱跳

    问题描述;shiro验证成功后,跳转页面不是shiro.xml文件中配置的跳转地址 1.自定义MyFormAuthenticationFilter继承FormAuthenticationFilter并 ...

最新文章

  1. GitHub开源的吃鸡版超级玛丽
  2. c++面试题之内存分配
  3. SonarQube4.4+Jenkins进行代码检查实例之一
  4. c++注释快捷键_Java编程之常用快捷键
  5. LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
  6. linux分区方案 arv,Linux运维 第三阶段 (九)NFS
  7. 20145109 《Java程序设计》第七周学习总结
  8. Android中通用配器的使用
  9. 华尔街大神:跌势不止,做空不止,你把握住了吗?
  10. 通过例子说明CMMI各级别不同
  11. 机器人演示demo_令人印象深刻的WebGL演示
  12. 【软考】 2 网络安全
  13. 火猴之ppt动画效果实现(firemonkey)
  14. android 闹钟不响,为什么我写的Android闹钟到时间时却不会响
  15. word毕业论文题注自动编号设置——第一章与图1-1
  16. 装备系统学习--GameGrind教程
  17. 【C语言程序】字符数组输出“I love you”的两种方式
  18. 实验四: 子集和问题
  19. ./configure --with参数
  20. 基于线上的茶叶购买小程序(论文+程序设计源码+数据库文件)

热门文章

  1. 【论文解读】ICLR2020 | 深度自适应Transformer
  2. 【机器学习基础】Python数据预处理:彻底理解标准化和归一化
  3. 卷积神经网络之 - VGGNet
  4. 职场思想分享001 | 有多种选择才叫有能力
  5. 我们距离“云”还有多远?
  6. iOS 播放gif动态图的方式探讨
  7. Raspberry Pi 2 Model B Pi4J 示例
  8. nodejs之async异步编程
  9. Hyper-V实战:高可用性-网络规划篇(Hyper-V1.0)
  10. 1209. 删除字符串中的所有相邻重复项 II