Apache Shiro 是一个强大且易用的 Java 安全框架,能够让开发者以非常清晰的方式处理身份认证、授权、会话管理以及密码加密。使用其易于理解的 API,开发者可以轻松,高效的为任何应用程序,从最小的移动应用程序到大型的网络和企业应用程序添加安全管理功能。

什么是 Shiro

Apache Shiro 是一个使用 Java 开发的,易于使用,功能强大且灵活的开源安全框架,它为开发人员提供了直观简洁的 API 来支持应用程序中的四个安全性基石:

  • 身份验证(Authentication)
  • 授权(Authorization)
  • 会话管理(Session Management)
  • 加密(Cryptography)

Shiro 提供了许多重要且实用的安全性相关的功能,其中被关注得最多的是身份验证和授权功能,这两者也是一个安全框架的核心功能,我们的课程将会把重心放在这两个部分,对于其它部分只进行简单的介绍。

想象有如下的动态安全模型:

管理员可以为应用系统创建不同的角色,角色可以绑定一组权限,之后管理员可以为不同用户分配一个或多个角色,并在应用正常提供服务期间在后台管理网页中随时更改所有这些功能。

通过使用 Shiro,我们将能够很容易的实现上述功能。

Shiro 框架的体系结构

Shiro 的设计目标是通过直观且易于使用的 API 来简化应用程序安全性相关代码的设计,应用程序安全控制功能的实现往往有着不同的需求场景,Shiro 的核心设计参考了这些用户在大多数情况下都会遇到的需求场景,在这些情况下来考虑 Shiro 的安全性设计。

在 Shiro 框架的最上层,主要有 3 个关键组件相互协作:

Subject

正如上面提到的那样,Subject 本质上是系统用户的一个特定安全 “视图”,可以表示会与应用程序交互的任何东西。

Subject 实例都强制绑定到 SecurityManager 上,当我们调用 Subject 的方法时,具体的操作最终都会转交给相关的 SecurityManager 进行处理。

SecurityManager

SecurityManager 是 Shiro 体系结构的核心,它协调着内部的其它安全组件,这些安全组件一起形成一种互相协作支持的关系,共同完成 Shiro 提供的所有功能。对于开发人员而言,一旦为应用程序配置了 SecurityManager,通常就不需要再理会它,我们只需要和 Subject 的 API 进行交互就可以了,这在上面的流程图中也有清晰的体现。

Realm

Realm 是 Shiro 与应用程序数据之间交换的“桥梁”,当 Shiro 真正需要与安全性相关的数据(例如用户帐户,用户角色,权限等)进行交互以执行身份验证和授权时,Shiro 会从一个或多个为应用程序配置的 Realm 中查找这些数据。

可以简单地把 Realm 理解为特定于安全性的 DAO,它封装了对安全性相关数据的访问,在配置 Shiro 时,我们必须至少指定一个 Realm 以用于身份验证(或授权)。

详细架构

下图展示了 Shiro 的核心体系结构:

上图是一个更加具体的 Shiro 详细架构图,图中清晰地描述了 SubjectSecurity ManagerRealm 三者各自在整个 Shiro 框架中所扮演的角色,以及担负的职责。

为了简化配置和实现灵活的可配置性(可插拔性),Shiro 的实现都是高度模块化的,高度模块化使得 SecurityManager 的实现实际上并没有做实质性的事情。相反,SecurityManager 的作用是作为一个轻量级的“容器”组件,将几乎所有的行为委托给封装在内部的其它组件,这是“包装器”设计模式的一种使用。

下面对身份认证器(Authenticator)和访问控制器(Authorizer)进行简单说明。

身份认证器(Authenticator)是负责执行和响应用户认证(登录)的组件。当用户尝试登录时,该逻辑由 Authenticator 执行,Authenticator 知道如何与一个或多个 Realm 进行协调,从这些 Realm 中获取用户的身份信息,然后完成身份认证过程。

访问控制器(Authorizer)是负责决定用户对应用中具体资源能否访问和操作的组件,是最终决定用户是否被允许做某事的机制,与 Authenticator 一样,Authorizer 也知道如何与多个 Realm 协调,以获取角色和权限信息,Authorizer 使用这些信息来确定用户是否被允许执行某个动作。

以上内容来自实验楼新课《Shiro 与 Spring Boot 实现权限管理系统》,课程后续还有:

该门课程将会以理论学习与实战相结合的方式分别对 Shiro 的身份认证和授权这两个最重要的安全功能着重进行学习。下面的截图展示了实战学习中,开发完成后角色管理的部分接口:

轻量又高效,Apache Shiro 你值得拥有!相关推荐

  1. 【原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型

    [原创]开源OpenIM:轻量.高效.实时.可靠.低成本的消息模型 1.内容概述 一套完整IM系统中,除开基本的业务设计,消息模型的设计是其中最为关键的一环,它关系到整个IM系统的可靠性.高效性.稳定 ...

  2. 企业级日志平台新秀!比 ELK 更轻量、高效

    点击关注公众号,回复"1024"获取2TB学习资源! 当我们公司内部部署很多服务以及测试.正式环境的时候,查看日志就变成了一个非常刚需的需求了.是多个环境的日志统一收集,然后使用 ...

  3. 轻量高效!清华智能计算实验室开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur

    作者丨科技猛兽 编辑丨极市平台 清华大学自动化系智能计算实验室团队开源基于 PyTorch 的视频 (图片) 去模糊框架 SimDeblur. 基于 PyTorch 的视频 (图片) 去模糊框架 Si ...

  4. 阿里云轻量应用服务器基于CentOS系统镜像快速部署Apache服务

    阿里云轻量应用服务器提供了Windows Server系统镜像和主流的Linux系统镜像,您可以通过该类镜像创建纯净.安全.稳定的运行环境.本文以CentOS 7.6系统镜像为例,介绍如何快速配置Ap ...

  5. 腾讯云轻量应用服务器 CentOS7.6 +Tomcat/apache 搭建个人web项目,并允许外网通过80或8080端口访问【超详细】

    目录 1. 腾讯云购买学生轻量应用服务器 2. 为服务器用户设置密码允许远程登录 3. 本地下载Xshell和Xftp远程管理更方便 4. 域名认证和域名解析 5. 服务器安装JDK和Tomcat 6 ...

  6. 31款轻量高效的开源 JavaScript 插件和库

    31款轻量高效的开源 JavaScript 插件和库 目前有很多网站设计师和开发者喜欢使用由[url=http://www.kubiji.cn/forum-id261.html]JavaScript[ ...

  7. 百度云轻量应用服务器LS从购买到web应用nginx搭建部署全流程--你值得拥有的入门级教程

    一直想走一遍搭建全流程 但总是拖延 最近 上海疫情 居家办公 每天没有通勤 时间很充裕 正好趁着这个时机 学习一下部署 整理一份笔记 以防自己忘记 也方便给有需要的人看.我会从购买服务器开始 写一个很 ...

  8. Shiro学习--Apache Shiro Architecture(Shiro架构)

    Apache Shiro Architecture 参考 http://shiro.apache.org/architecture.html 本文有点翻译的意思,是为了梳理Shiro的知识而做的Shi ...

  9. Apache Shiro 框架简介和下载导入

    实现权限控制, 可以自己写代码实现 (粗粒度权限控制 Filter. 细粒度权限控制 自定义注解.代理.反射技术) 1. 自己写权限框架 2. Spring Security (使用复杂, 依赖 Sp ...

最新文章

  1. 人体解析--Look into Person: Self-supervised Structure-sensitive Learning
  2. Redis的学习记录
  3. FeResPost 4.1.8 发布
  4. PMCAFF | 刷微信朋友圈行为分析:刷朋友圈是一种感觉?有一种批皇帝批奏章的感觉...
  5. sylog mysql_25.2 配置使用基于mysql存储日志信息
  6. 执行setenv ethaddr的时候提示Can't over write的原因及解决方法
  7. C++ 11右值引用
  8. 大数据之_SCALA工作笔记001---Centos7.3安装scala
  9. CORS 跨域 实现思路及相关解决方案
  10. postgresql和greenplum使用笔记
  11. matlab中fopen 和 fprintf函数总结
  12. 2020年开发者大会资料和武大定量遥感视频分享(部分)
  13. 在内核中构造一个UDP 数据
  14. mediacodec配置h265解码
  15. codelldb-x86_64-windows.vsix 下载
  16. 第三次科技革命与计算机网络,第三次科技革命
  17. android状态栏右上角增加图标的方法
  18. 微信支付一直显示服务器异常,商户支付异常告警服务
  19. C语言经典问题10-计算a+aa+aaa+...的值
  20. java+selenium,40行代码完成支付宝账单爬取

热门文章

  1. 【转】C# 操作系统防火墙
  2. PHP 获取JSON json_decode返回NULL解决办法
  3. SpringMVC Controller的返回类型
  4. (转载)python多行注释
  5. .net 深入系统编程(三)
  6. iOS iCloud云存储数据
  7. 关于货仓选址问题的方法及证明(在数轴上找一点使得该点到所有其他点的距离之和最小)...
  8. Django如何安装指定版本
  9. Java 基本类型相互转换
  10. 【教程】jQuery打造动态下滑菜单