shiro权限框架介绍以及springboot整合shiro

news2024/11/16 21:46:20

What is Apache Shiro?

Apache Shiro is a powerful and flexible open-source security framework that cleanly handles authentication, authorization, enterprise session management and cryptography.

Apache Shiro’s first and foremost goal is to be easy to use and understand. Security can be very complex at times, even painful, but it doesn’t have to be. A framework should mask complexities where possible and expose a clean and intuitive API that simplifies the developer’s effort to make their application(s) secure.

Here are some things that you can do with Apache Shiro:

Authenticate a user to verify their identity

Perform access control for a user, such as:

Determine if a user is assigned a certain security role or not

Determine if a user is permitted to do something or not

Use a Session API in any environment, even without web or EJB containers.

React to events during authentication, access control, or during a session’s lifetime.

Aggregate 1 or more data sources of user security data and present this all as a single composite user ‘view’.

Enable Single Sign On (SSO) functionality

Enable ‘Remember Me’ services for user association without login

and much more - all integrated into a cohesive easy-to-use API.

Shiro attempts to achieve these goals for all application environments - from the simplest command line application to the largest enterprise applications, without forcing dependencies on other 3rd party frameworks, containers, or application servers. Of course the project aims to integrate into these environments wherever possible, but it could be used out-of-the-box in any environment.

翻译内容如下
Apache Shiro是一个强大而灵活的开源安全框架,它可以清晰地处理身份验证、授权、企业会话管理和加密。

Apache Shiro的首要目标是易于使用和理解。安全有时可能非常复杂,甚至令人痛苦,但它不必如此。框架应该尽可能地掩盖复杂性,并公开干净直观的API,以简化开发人员确保应用程序安全的工作。

下面是一些你可以用Apache Shiro做的事情:

对用户进行身份验证以验证其身份

对用户进行访问控制,包括:

确定是否为用户分配了某个安全角色

确定是否允许用户做某事

在任何环境中使用Session API,即使没有web或EJB容器。

在身份验证、访问控制或会话生命周期期间响应事件。

聚合1个或多个用户安全数据数据源,并将其全部呈现为单个复合用户“视图”。

启用单点登录功能

启用“记得我”服务,让用户无需登入便可关联
...
以及更多-所有这些都集成到一个内聚的易于使用的API中。

Shiro试图为所有应用程序环境实现这些目标——从最简单的命令行应用程序到最大的企业应用程序,而不强制依赖于其他第三方框架、容器或应用程序服务器。当然,该项目旨在尽可能地集成到这些环境中,但是它可以在任何环境中使用。

Apache Shiro Features(特性/功能)

Apache Shiro特性
图1。Apache Shiro特性
Shiro的目标是Shiro开发团队所谓的“应用程序安全的四个基石”——身份验证、授权、会话管理和密码:

身份验证:有时也被称为“登录”,这是一种证明用户身份的行为。

授权:访问控制的过程,即确定“谁”可以访问“什么”。

会话管理:管理特定于用户的会话,甚至是非web或EJB应用程序。

密码学:使用加密算法保持数据安全,同时仍然易于使用。

在不同的应用程序环境中,还有其他特性可以支持和加强这些问题,特别是:

Web支持:Shiro的Web支持api帮助轻松保护Web应用程序。

缓存:缓存是Apache Shiro API中的第一层公民,用于确保安全操作保持快速高效。

并发性:Apache Shiro通过其并发性特性支持多线程应用程序。

测试:测试支持的存在是为了帮助您编写单元和集成测试,并确保您的代码按照预期安全。

“Run As”:允许用户使用另一个用户的身份(如果允许的话)的特性,有时在管理场景中很有用。

“Remember Me”:在会话中记住用户的身份,这样他们只需要在强制时登录。

Apache Shiro Architecture

Apache Shiro的设计目标是通过直观和易于使用来简化应用程序安全性。Shiro的核心设计模拟了大多数人对应用程序安全性的看法——在某人(或某物)与应用程序交互的上下文中。

  • 概述
    在最高的概念级别上,Shiro的架构有3个主要概念:Subject、SecurityManager和Realms。下图是这些组件如何交互的高级概述,我们将在下面介绍每个概念:

在这里插入图片描述
Subject:正如我们在教程中提到的,Subject本质上是当前执行用户的特定于安全的“视图”。“用户”一词通常指的是人,而主体可以是人,但它也可以代表第三方服务、守护帐户、cron作业或任何类似的东西——基本上是当前与软件交互的任何东西。

主题实例都绑定到(并且需要)SecurityManager。当您与Subject交互时,这些交互将转换为与SecurityManager的特定于主题的交互。

SecurityManager: SecurityManager是Shiro架构的核心,充当一种“保护伞”对象,协调内部安全组件,共同形成对象图。然而,一旦为应用程序配置了SecurityManager及其内部对象图,它通常就不会受到影响,应用程序开发人员几乎把所有时间都花在Subject API上。

我们将在后面详细讨论SecurityManager,但重要的是要认识到,当您与Subject交互时,实际上是幕后的SecurityManager为任何Subject安全操作做了所有繁重的工作。这反映在上面的基本流程图中。

Realms: Realms充当Shiro和应用程序安全数据之间的“桥梁”或“连接器”。当需要实际与安全相关数据(如用户帐户)交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个realm中查找其中的许多内容。

从这个意义上讲,Realm本质上是一个特定于安全的DAO:它封装了数据源的连接细节,并根据需要将相关数据提供给Shiro。配置Shiro时,必须指定至少一个Realm用于身份验证和/或授权。SecurityManager可以配置多个realm,但至少需要一个。

  • 详细架构
    在这里插入图片描述
    Subject当前与软件交互的实体(用户、第三方服务、cron作业等)的特定于安全的“视图”。

如前所述,SecurityManager是Shiro架构的核心。它主要是一个“伞形”对象,用于协调其托管组件,以确保它们顺畅地协同工作。它还管理Shiro对每个应用程序用户的视图,因此它知道如何对每个用户执行安全操作。

Authenticator: Authenticator是负责执行和响应用户的身份验证(登录)尝试的组件。当用户尝试登录时,Authenticator将执行该逻辑。验证者知道如何与一个或多个存储相关用户/帐户信息的域进行协调。从这些领域获得的数据用于验证用户的身份,以确保用户确实是他们所说的那个人。

如果配置了多个Realm, AuthenticationStrategy将协调各个Realm以确定身份验证尝试成功或失败的条件(例如,如果一个域成功而其他域失败,那么尝试成功吗?所有领域都必须成功吗?只有第一个?)

授权器:授权器是负责确定应用程序中用户访问控制的组件。它是一种机制,最终决定是否允许用户做某事。与验证者一样,授权者也知道如何与多个后端数据源协调以访问角色和权限信息。授权人使用此信息来确定是否允许用户执行给定的操作。

SessionManager: SessionManager知道如何创建和管理用户会话生命周期,为所有环境中的用户提供健壮的会话体验。这是安全框架世界中的一个独特特性——Shiro能够在任何环境中本地管理用户会话,即使没有可用的Web/Servlet或EJB容器。默认情况下,Shiro将使用现有的会话机制(例如Servlet容器),但如果没有,例如在一个独立的应用程序或非web环境中,它将使用其内置的企业会话管理来提供相同的编程体验。SessionDAO的存在是为了允许使用任何数据源持久化会话。

SessionDAO代表SessionManager执行会话持久性(CRUD)操作。这允许将任何数据存储插入到Session Management基础设施中。

CacheManager (org.apache.shiro.cache.CacheManager)创建并管理其他Shiro组件使用的Cache实例生命周期。由于Shiro可以访问许多后端数据源进行身份验证、授权和会话管理,因此缓存一直是该框架中的一流体系结构特性,可以在使用这些数据源时提高性能。任何现代开源和/或企业缓存产品都可以插入到Shiro中,以提供快速高效的用户体验。

密码学是企业安全框架的自然补充。Shiro的加密包包含易于使用和理解的加密密码,哈希(又名摘要)和不同的编解码器实现的表示。这个包中的所有类都经过精心设计,非常易于使用和理解。任何使用过Java原生加密支持的人都知道,它是一种难以驯服的动物。Shiro的加密api简化了复杂的Java机制,使加密技术易于为普通人使用。

如上所述,Realms是Shiro和应用程序安全数据之间的“桥梁”或“连接器”。当需要实际与安全相关数据(如用户帐户)交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个realm中查找其中的许多内容。您可以根据需要配置任意数量的realm(通常每个数据源一个),Shiro将根据需要与它们协调进行身份验证和授权。

在Shiro的默认SecurityManager实现中,这包括:身份验证、授权、会话管理、缓存管理、领域的协调、事件传播、“记住我”服务、主题创建、注销等等。

但是在一个组件中要管理的功能太多了。而且,如果所有东西都集中在一个实现类中,使这些东西变得灵活和可定制将是非常困难的。

为了简化配置并实现灵活的配置/可插拔性,Shiro的实现在设计上都是高度模块化的——实际上是如此模块化,以至于SecurityManager实现(及其类层次结构)根本没有做太多事情。相反,SecurityManager实现主要充当轻量级的“容器”组件,将几乎所有的行为委托给嵌套/包装组件。这种“包装器”设计反映在上面的详细架构图中。

当组件实际执行逻辑时,SecurityManager实现知道如何以及何时协调组件以实现正确的行为。

SecurityManager实现和组件也与JavaBeans兼容,这允许您(或配置机制)通过标准的JavaBeans访问器/突变器方法(get*/set*)轻松地自定义可插入组件。这意味着Shiro的架构模块化可以转换为定制行为的非常简单的配置。

how to use shiro in spring-boot

参考文档: https://shiro.apache.org/get-started.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LDO的dropout voltage

目录从一个设计错误谈起Dropout压降从芯片内部电路结构理解dropout压降MOS管 > 低dropout压降的LDO进一步降低dropout压降的方法在系统设计中,电源管理是不可或缺的,而LDO(线性稳压器)是电源管理器件中及其重要的一类器件。其应…

【JUC系列】线程变量ThreadLocal详解

ThreadLocal简介 ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访…

Java-基础-2.常用类

一:object 他是java中最基础,最核心的类。在java类中,为申明extends,默认 extends Object。方法。 3.1 toString方法 public String toString()方法,其返回值是 String 类型,描 述当前对象的有关信息。 3.…

Java中的多态及应用示例

Java中的多态及实现示例简介实现示例instance of(待补)补入Java多态 简介 【预留(业务逻辑)接口的抽象类】对象 new 【实现了该 预留(业务逻辑)接口】的【预留业务逻辑接口的抽象类的子类】的 对象&…

Java_Git:5. 在IntelliJ IDEA中使用git

目录 1 在Idea中配置git 2 将工程添加至git 2.1 创建工程 2.2 创建本地仓库 2.3 将工程添加至本地仓库 2.4 推送到远程 3 从远程仓库克隆 4 从服务端拉取代码 1 在Idea中配置git 安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找…

C语言学习笔记-数据类型

在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C数据可以从两方面宽泛的看:一、变量和常量;二、数据类型 从定义出发,变…

打造数字时代的“诺亚方舟”

玛雅人关于2012世界末日的预言除了提供给好莱坞灵感,拍摄了令人震撼的灾难片《2012》之外,似乎没有留下什么,人们已经渐渐淡忘了世界末日的说法。 但现实世界中却接二连三地在发生着重大灾难:2018年巴西国家博物馆大火&#xff0c…

(考研湖科大教书匠计算机网络)第三章数据链路层-第四节:可靠传输

专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:可靠传输基本概念(1)不可靠传输与可靠传输(2)分组丢失、分组失序和分组重复(3)可靠传输注意二&#xff1…

如何快速掌握Mybatis-Plus

目录 1. 什么是mybatis-plus 2. 初体验 3. 日志 4. 主键生成策略 6. 自动填充 7. 乐观锁 8. 条件查询 9. 分页查询 10. 逻辑删除 11. Wrapper 12. 在Mybatis-plus中使用xml配置 1. 什么是mybatis-plus MyBatis-Plus (opens new window)(简称 MP&#xff…

细说Linux虚拟化KVM-Qemu之virtio驱动

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 前篇文章讲完了Qemu中如何来创建Virtio Device,本文将围绕Guest OS中的Virtio Driver来展开; 看一下Guest OS&…

发布自己的依赖(代码)到maven仓库2023

如果不想看文字可以看下面的视频 发布自己代码到maven中央仓库!第一步去sonatype注册登录,并发布issue https://issues.sonatype.org/secure/Dashboard.jspa > 去这个网站注册登录,用户名和密码会在后面发布jar包到中央仓库上用的到。 …

力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——748. 最短补全词、744. 寻找比目标字母…

LinuxC—网络套接字

网络套接字socket 1 跨主机传输需要注意的问题 1.1 字节序问题 大端存储与小端存储 大端:低地址处方高字节小端:低地址处方低字节 主机字节序和网络字节序 若两个主机的字节序存储方式不同,直接传输的数据被对方接收后会就会使完全错误的&a…

Java8到Java17之间的主要特性描述

Java8到Java17之间的主要特性描述 文章目录Java8到Java17之间的主要特性描述Java8lambda表达式与Stream API方法引用(Method Reference)接口默认方法(Default Methods)类型注解(Type Annotations)可重复注解…

一文看懂YOLO v8

2023年,YOLO系列已经迭代到v8,v8与v5均出自U神,为了方便理解,我们将通过与v5对比来讲解v8。想了解v5的可以参考文章yolov5。 首先,回归一下yolov5: Backbone:CSPDarkNet结构,主要结…

结构体的内存对齐规则

结构体的内存 一、对齐规则 1.数据成员对齐规则:结构(struct或联合union)的数据成员,第一个成员在与结构体变量偏移量为0的地址处,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节&#xff0…

anaconda/python安装虚拟环境并安装特定版本的库文件

anaconda/python安装虚拟环境并安装特定版本的库文件 文章目录anaconda/python安装虚拟环境并安装特定版本的库文件python安装虚拟环境安装教程pycharm加载虚拟环境以及安装指定的库文件python安装虚拟环境 安装教程 安装主要的代码指令就是下面这一句: conda create -n Env…

金融风控10

深度学习与金融风控 反欺诈生命周期 第一层设备与网络 - 代理检测 - IDC检测 - 模拟器/虚拟机检测 - 木马检测 第二层用户行为 - 注册行为 - 登录行为 - 交易行为 - 事件行为 - 时间间隔异常 第三层业务频次 - 注册频次 - 登录频次 - 交易频次 - 地域频次 - …

计算机组成原理笔记记录(第二章)

次为笔记记录&#xff0c;原视频链接为B站视频链接&#xff0c;若有错误请指出&#xff0c;看到就会改正 进制 r进制数及其转换成十进制数 r^n就是第n位的维权,n<0就是小数部分的位权。 例子:1011 为十进制的时候:10111103010211011100 为二进制的时候 1011123022121120(10…

Scipy误差函数详解

文章目录误差函数简介复平面上的误差函数与误差函数相关的函数误差函数简介 误差函数的实质是正态分布的概率&#xff0c;其重要性可见一斑&#xff0c;其表达式为 erf⁡2π∫0xe−t2dt\operatorname{erf}\frac{2}{\sqrt{\pi}}\int^x_0e^{-t^2}\text dt erfπ​2​∫0x​e−t2…