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

SpringBoot+Shiro权限管理

Shiro是一个强大的Java安全框架,提供了身份验证、授权、加密、会话管理以及与Web集成等多种安全功能。以下是对Shiro权限管理的详细总结:

一、Shiro权限管理的基本概念

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。Shiro框架通过一系列组件和过滤器,实现了对系统资源的细粒度访问控制。

  1. Subject:Shiro的核心对象,代表当前用户或系统操作主体。Subject可以是一个人或者任何其他的系统用户,通过Subject可以进行登录、退出、权限判断等操作。
  2. SecurityManager:Shiro的核心管理器,负责管理所有Subject。负责协调认证和授权的过程,处理身份验证、授权、会话管理等功能。
  3. Realm:用于验证用户身份和获取用户的角色及权限信息的数据源。Realm主要负责从数据源(如数据库)中获取身份验证和授权信息。

二、Shiro权限管理的核心组件

  1. Realm:领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据。如果用户身份数据在数据库,那么realm就需要从数据库获取用户身份信息。注意,不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。

  2. SecurityManager:安全管理器,对全部的subject进行安全管理,它是shiro的核心,负责对所有的subject进行安全管理。通过SecurityManager可以完成subject的认证、授权等,实质上SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等。SecurityManager是一个接口,继承了Authenticator、Authorizer、SessionManager这三个接口。

    • Authenticator:认证器,对用户身份进行认证。Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器。
    • Authorizer:授权器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。
    • SessionManager:会话管理,shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。
  3. SessionDAO:会话dao,是对session会话操作的一套接口,比如要将session存储到数据库,可以通过jdbc将会话存储到数据库。

  4. CacheManager:缓存管理,将用户权限数据存储在缓存,这样可以提高性能。

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

三、Shiro权限管理的实现原理

Shiro权限管理的实现原理主要是通过安全管理器SecurityManager来管理Subject对象,Subject对象代表了当前用户或操作主体。通过Realm从数据源中获取用户的身份验证和授权信息,然后使用SecurityManager进行用户身份验证和权限控制。

  1. 用户通过浏览器发起请求,服务端接收请求并进行登录认证操作。
  2. 服务端向用户发送会话cookie,标识用户身份信息,此时会话正式建立。用户再次发起请求时,将会话cookie带在HTTP头中发送给服务端。
  3. 服务端接收到请求后,根据cookie和Shiro框架内置的Session中的会话信息,生成合法的Subject对象。
  4. Subject对象根据原有角色信息,调用相应的Realm实例,进行登录权限认证。Realm会查询数据库或其他存储源来获取用户的身份验证信息,并进行比对。

根据登录成功后获取的角色、访问权限等信息,通过Web工具根据URL访问的信息,进行权限认证。Shiro通过注解、AOP增强等技术,在程序运行时保证用户拥有相应的访问权限。当用户尝试访问系统资源时,Shiro会检查其安全对象中是否包含对该资源的访问权限。如果用户没有足够的权限,将会被拒绝访问。

四、Shiro权限管理的应用场景

Shiro适用于各种Java应用程序的安全控制,以下是一些Shiro适用的场景:

  1. Web应用程序:Shiro可以为Web应用程序提供身份认证和授权功能,从而保护Web应用程序的安全性和可靠性。
  2. RESTful API:Shiro可以为RESTful API提供身份认证和授权功能,从而保护API的数据安全和隐私性。
  3. 分布式系统:Shiro可以为分布式系统提供身份认证和授权功能,从而保护系统的安全性和一致性。
  4. 单点登录系统:Shiro可以为单点登录系统提供身份认证和授权功能,从而简化用户的登录流程和提高系统的可用性。
  5. 企业级应用:Shiro可以为企业级应用提供身份认证和授权功能,从而保护企业的安全性和合规性。

五、Shiro权限管理的优势

  1. 灵活性:Shiro提供了灵活的扩展性和可配置性,可以根据具体需求定制自己的安全策略和实现。
  2. 性能优化:Shiro内置了缓存机制,可以提高系统的性能和响应速度。
  3. 易用性:Shiro提供了丰富的API和文档,可以方便地与其他框架或工具集成。
  4. 安全性高:Shiro内置了多种安全机制,如加密、防止跨站点脚本攻击、防止会话劫持等,可以保护系统不受各种安全威胁。

六、Shiro权限管理的实现步骤

  1. 配置Shiro:在项目的配置文件(如Spring的配置文件)中配置Shiro的相关组件,包括SecurityManager、Realm等。
  2. 创建Realm:实现Realm接口,重写doGetAuthorizationInfo和doGetAuthenticationInfo方法,用于获取用户的权限信息和身份验证信息。
  3. 编写认证和授权逻辑:在需要认证和授权的地方,通过Subject对象调用相应的认证和授权方法。例如,可以使用@RequiresRoles和@RequiresPermissions注解来指定访问某个方法所需的角色或权限。
  4. 处理认证和授权结果:根据认证和授权的结果,执行相应的操作。例如,如果认证失败,可以抛出异常或返回错误信息;如果授权失败,可以拒绝用户访问相应的资源。

七、Shiro权限管理的注意事项

  1. 权限设计:权限设计不能太过于复杂,否则性能会下降。应该根据实际需求,合理设计角色和权限的划分。
  2. 安全性:在使用Shiro进行权限管理时,需要注意安全性问题。例如,应该避免将敏感信息明文存储在数据库中,应该使用加密技术来保护敏感信息的安全性。
  3. 性能优化:Shiro内置了缓存机制,可以提高系统的性能和响应速度。但是,在使用缓存时,需要注意缓存的一致性和过期时间等问题。
  4. 与其他框架的集成:Shiro可以方便地与其他框架或工具集成,如Spring、Hibernate等。但是,在集成时需要注意版本兼容性和配置问题。

八、Shiro权限管理的案例

以下是一个使用Shiro框架进行权限管理的Java Web应用程序示例:

  1. 引入Shiro依赖:在项目的pom.xml文件中引入Shiro的依赖。
  2. 配置Shiro:在Spring的配置文件中配置Shiro的相关组件,包括SecurityManager、Realm等。
  3. 创建Realm:实现Realm接口,重写doGetAuthorizationInfo和doGetAuthenticationInfo方法,用于获取用户的权限信息和身份验证信息。
  4. 编写控制器:在控制器中使用@RequiresRoles和@RequiresPermissions注解来指定访问某个方法所需的角色或权限。
  5. 处理认证和授权结果:根据认证和授权的结果,执行相应的操作。例如,如果认证失败,可以返回错误信息;如果授权失败,可以拒绝用户访问相应的资源。

通过以上步骤,就可以实现一个简单的基于Shiro的权限管理系统。该系统可以根据用户的角色和权限信息,控制用户对应用程序资源的访问权限,从而保护应用程序的安全性和可靠性。

总之,Shiro是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理等多种安全功能。通过合理地使用Shiro的权限管理功能,可以有效地保护应用程序的资源安全,提高系统的安全性和可靠性。

相关文章:

SpringBoot+Shiro权限管理

Shiro是一个强大的Java安全框架,提供了身份验证、授权、加密、会话管理以及与Web集成等多种安全功能。以下是对Shiro权限管理的详细总结: 一、Shiro权限管理的基本概念 权限管理,一般指根据系统设置的安全规则或者安全策略,用户…...

前端面试题22 | 什么是跨域问题?怎么解决?

哈喽小伙伴们大家好!新的一周开始啦~距离2024年结束也仅有两个月了,不知道大家年初给自己制定的目标实现了多少?不管怎样,接下来的两个月都请继续加油哦!我们坚持下来了,我们就是最棒的! 今天,继续来给大家分享一道面试题 在开发中,我们经常会遇到跨域的问题,尤其是开发前后…...

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求:界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式: ①设计师提供:基于项目的图标,拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…...

科研绘图系列:R语言组合连线图和箱线图(linechart+boxplot)

文章目录 介绍加载R包数据数据预处理画图1画图2系统信息介绍 连线图(Line Chart)是一种常用的数据可视化图表,它通过将一系列数据点用直线段连接起来来展示数据随时间或有序类别变化的趋势。以下是连线图可以表示的一些内容: 时间序列数据:展示数据随时间变化的趋势,例如…...

对象的接口与设计模式在其中的作用

对象的接口 对象的接口定义了对象的行为和如何与外界进行交互。以下是对象接口的详细解释: 成员函数(Member Functions) 定义:成员函数是定义在类中的函数,用于实现类的行为。成员函数可以通过对象来调用&#xff0…...

如何自学机器学习?

自学机器学习可以按照以下步骤进行: 一、基础知识准备 数学基础: 高等数学:学习微积分(包括导数、微分、积分等)、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数:掌握矩阵…...

python中应该使用while 1吗?按位运算符可以代替逻辑运算符使用吗?

while 1 很多初学者都很喜欢使用while 1,原因可能是,1只需要输入一个字符,更加“省事”,可以“偷懒”,并且,1看起来更加简洁明了。 实际上,在python中,while 1与while True是等价的…...

线程ID和线程库

在linux中,线程的运行可以用lwp来标识,只是操作系统的标识方法,lwp表示轻量级进程,在Linux中,进程和线程都可以用lwp来标识,而对于用户来说,也有对应的线程ID, 线程库 在linux中&a…...

使用AWS Lambda构建无服务器应用程序

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用AWS Lambda构建无服务器应用程序 AWS Lambda 简介 创建 AWS 账户 创建 Lambda 函数 配置触发器 编写和测试代码 示例代码&am…...

响应式网页设计案例

文章目录 概念核心理念响应式设计的优点实现方法代码案例解释 概念 响应式设计核心理念是一个网站能够根据访问者的设备特性自动调整布局、内容和功能,以提供最佳的用户体验。它依赖于CSS媒体查询、灵活的网格布局和可伸缩的图像,确保网页内容在不同设备…...

麦麦Docker笔记(一)

本文记录如何零基础使用Docker Desktop。 使用操作系统为 macos 15.0.1 相关地址 docker官网 docker hub的镜像地址 下载docker desktop 前往官网下载,我用的macbook,下载的是apple 吸力根版本的,然后拖到application里完成安装&#xff…...

【设计模式系列】总览

努力填完如下表格ing... 设计模式简述详细链接单例模式(Singleton)工厂方法模式(Factory Method)简单工厂模式(Simple Factory Pattern)简单工厂模式是一个静态的工厂类,它提供一个根据参数决定…...

P11118 [ROI 2024 Day 2] 无人机比赛 题解

Description 有 n n n 架无人机参与比赛,第 i i i 架无人机飞过一个单位距离需 t i t_i ti​ 秒。 赛道为一条直线,上面有 m m m 个存档点,第 i i i 个存档点距起点 s i s_i si​ 个单位长度,保证 s i 1 > s i s_{i1…...

时序数据库是什么:概念、特点与分类简析

时序数据与时序数据库的“保姆级”科普! 作为将数据价值转化为产能能效的“核心大脑”,数据库的发展依然处于加速期,面向不同数据类型的数据库类型也在不断增加。 在众多细分领域数据库类型中,伴随制造业数字化转型的行业趋势和多…...

大数据上岗.入职.就业面试题

1.海量日志数据,提取出某日访问阿里次数最多的那个IP   首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到ip是32位的,最多有个2^32个ip。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,在找出每个小文件中出现频率…...

2016年7月和8月NASA的气候成像(ATom)-1飞行活动期间测量的黑碳(BC)质量混合比(单位为ng BC / kg空气)

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 简介 ATom: Black Carbon Mass Mixing Ratios from ATom-1 Flights 该数据集提供了在2016年7月和8月NASA的气候成像(ATom)-1飞行活动期间测量的黑碳(BC)质量混合比&…...

python opencv3

三、图像预处理2 1、图像滤波 为图像滤波通过滤波器得到另一个图像。也就是加深图像之间的间隙,增强视觉效果;也可以模糊化间隙,造成图像的噪点被抹平。 2、卷积核 在深度学习中,卷积核越大,看到的信息越多&#xff0…...

git原理与上传

言: git是一个软件,gitee/github是一个网站,这里有什么联系吗?我们身为一个程序员不可能不知道github,但是毕竟这是外国的网站,我们不翻墙的情况下,是无法访问的(或者就是太慢了,或…...

LeetCode:633. 平方数之和(Java)

633. 平方数之和 题目描述: 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 b2 c 。 示例 1: 输入:c 5 输出:true 解释:1 * 1 2 * 2 5示例 2: 输入&#xf…...

linux查看端口状态的命令合集

linux查看端口状态的命令合集 直接使用 netstat 命令 如果你不需要超级用户权限,可以直接运行 netstat 命令: netstat -tuln 使用 ss 命令 ss 是一个更现代的工具,通常不需要超级用户权限就能查看端口信息。你可以尝试使用 ss 命令&#xff…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...