Shiro安全框架(SSM框架)

目录

一、认证策略

二、加密算法

三、授权

四、SessionManager

五、RememberMe


一、认证策略

Shiro安全框架中的认证策略是灵活多样的,可以根据具体的应用场景和需求进行选择。以下是Shiro中常见的几种认证策略:

  1. AtLeastOneSuccessfulStrategy:此策略表示只要有一个Realm验证成功,则整体的认证尝试被认为是成功的。这种策略适用于有多个Realm,并且只要任何一个Realm能够成功验证用户的情况。
  2. FirstSuccessfulStrategy:此策略会在多个Realm中按顺序进行验证,只要第一个验证成功的Realm,就会立即停止后续的验证,并认为整体认证成功。这种策略适用于有一个首选的Realm,或者希望尽早结束验证过程的情况。
  3. AllSuccessfulStrategy:此策略要求所有的Realm都必须验证成功,才能认为整体的认证尝试是成功的。这通常用于需要多个Realm同时验证用户身份的场景,例如,用户需要同时满足多个安全条件(如密码验证和指纹验证)才能登录。

在Shiro中,这些认证策略可以通过简单的配置进行选择和调整。通过更改验证器最后的认证策略,就可以实现不同的认证需求。

此外,Shiro还提供了强大的认证功能,包括身份认证、登录验证用户身份,以及授权功能,即验证已认证的用户是否拥有特定的权限。Shiro还支持会话管理、缓存管理等功能,以提供全面的安全解决方案。

需要注意的是,在使用Shiro进行认证时,需要考虑到安全性和性能之间的平衡。选择合适的认证策略,以及合理地配置Realm和缓存等组件,都是实现高效且安全认证的关键。同时,也需要根据具体的应用场景和需求,进行定制化的配置和优化。

二、加密算法

Shiro安全框架中的加密算法主要包括哈希算法、对称加密算法和非对称加密算法。

哈希算法能够将密码转化为固定长度的哈希值,从而提高密码的安全性。常见的哈希算法如MD5、SHA等,这些算法一般用于存储密码之类的数据,具有不可逆性。为了提高安全性,在进行哈希时,通常还会加上一些只有系统知道的干扰数据,如用户名和ID(即“盐”),这样哈希的对象是“密码+用户名+ID”,从而生成的哈希值相对来说更难破解。

在加密算法方面,Shiro可以使用对称加密算法(如AES、DES)和非对称加密算法(如RSA)来保护数据的传输和存储安全。对称加密算法使用相同的密钥进行加密和解密,适用于需要高效加密大量数据的场景;非对称加密算法则使用公钥和私钥进行加密和解密,提供了更高的安全性,尤其适用于需要验证数据发送者身份的场景。

这些加密算法可以根据具体的应用场景和需求进行选择和使用,以确保数据的安全性和完整性。同时,Shiro还提供了灵活的配置方式,可以根据实际需求调整加密策略和参数。

需要注意的是,虽然Shiro提供了强大的加密算法和策略,但在实际使用中,还需要考虑到其他安全因素,如密钥管理、安全协议等,以确保整体的安全性。

三、授权

Shiro安全框架中的授权是系统安全的重要组成部分,它控制用户对资源的访问权限。在Shiro中,授权主要通过以下几个关键组件和策略来实现:

  1. 权限管理:Shiro的权限管理功能允许你定义哪些用户可以访问哪些资源。这通常涉及到用户和角色之间的关联,以及角色和权限之间的关联。通过这种关联,你可以为不同的用户或角色分配不同的权限,从而实现细粒度的访问控制。

  2. 授权方式:Shiro支持多种授权方式,以满足不同场景的需求。其中包括:

    • 简单授权:通过配置文件定义用户和角色的对应关系,实现简单的授权逻辑。
    • 基于注解的授权:使用Java注解来标识需要授权的方法或类,这样可以在代码层面直接控制访问权限。
    • 基于XML配置的授权:通过XML文件定义用户、角色和权限等信息,实现更为复杂的授权逻辑。
    • 基于数据库的动态授权:将用户、角色和权限信息存储在数据库中,实现动态授权。这种方式可以方便地管理大量用户和复杂的权限关系。
  3. 授权流程:当用户尝试访问某个资源时,Shiro会按照以下流程进行授权判断:

    • 首先,验证用户的身份,确认用户是否已登录。
    • 然后,根据用户的角色和权限信息,判断用户是否具有访问该资源的权限。
    • 如果用户具有访问权限,则允许其访问资源;否则,拒绝访问并返回相应的错误信息。
  4. 细粒度授权:Shiro还支持细粒度的授权控制,即可以对资源的实例进行权限控制,而不仅仅是资源类型。这使得你可以更加精确地控制用户对资源的访问。

需要注意的是,在实际应用中,授权策略应根据具体的业务需求和场景进行设计。同时,为了确保安全性,还需要定期审查和更新授权策略,以适应不断变化的业务需求和安全威胁。

总的来说,Shiro安全框架中的授权功能提供了强大而灵活的访问控制机制,可以帮助你实现安全、高效的权限管理。

四、SessionManager

Shiro安全框架中的SessionManager负责管理和控制用户的会话。具体来说,它管理着应用中所有Subject(主体,通常是用户)的会话,包括会话的创建、维护、删除、失效和验证等工作。

在Shiro中,默认的SecurityManager实现默认使用了一个立即可用的DefaultSessionManager。这个DefaultSessionManager为JavaSE环境提供了应用程序所需的所有企业级会话管理功能,如会话验证、孤儿会话清理等。

SessionManager接口是Shiro所有会话管理器的顶级接口,它声明了如Session start(SessionContext context)Session getSession(SessionKey key) throws SessionException等方法,用于启动会话和获取会话。

此外,Shiro还提供了SessionListener和SessionListenerAdapter,用于监听会话事件,如会话创建、销毁和过期等。通过这些监听器,你可以实现自定义的会话管理逻辑。

Shiro的会话管理还支持会话的持久化。这通常通过使用SessionDAO(Data Access Object)模式实现,该模式提供了会话的CRUD(创建、读取、更新和删除)操作。这意味着,你可以将会话数据存储在关系数据库、文件系统或NoSQL数据库等持久化存储中,以便在需要时恢复会话状态。

总的来说,Shiro的SessionManager为开发者提供了强大而灵活的会话管理功能,可以根据具体的应用场景和需求进行配置和扩展。

五、RememberMe

在Shiro安全框架中,RememberMe功能是一种允许用户持久化会话的机制,即记住用户的登录状态。这样,用户在关闭浏览器或重新启动应用后,再次访问需要认证的资源时,无需重新登录。

Shiro实现RememberMe功能的方式主要是在用户的浏览器上发放一个Cookie(通常是加密过的)。这个Cookie对应一个特定的值(如"remember-me")。每当用户在Shiro处理请求时,都会携带这个Cookie。Shiro会从Cookie中获取这个特定值,从而识别该请求是否来自一个已登录过的用户。如果是,Shiro就不会再进行进一步的登录认证,而是直接允许用户访问资源。

要在Shiro中启用RememberMe功能,需要进行一系列的配置。首先,需要在配置文件中定义RememberMe的Cookie和相关属性,如Cookie的名称、是否仅通过HTTP传输、以及Cookie的有效期等。然后,在安全管理器的属性中配置RememberMe,并设置其失效时间。此外,还需要在页面中添加RememberMe的选项,以便用户可以选择是否启用该功能。

通过合理使用Shiro的RememberMe功能,可以提高用户体验,减少用户频繁登录的麻烦,同时确保用户会话的安全性。但需要注意的是,在使用RememberMe功能时,应确保Cookie的安全性,避免潜在的安全风险。


文章制作不易,如果有帮助的话,还希望能给个点赞关注支持一下,谢谢大家!🙏🙏🙏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rancher-Longhorn-新增磁盘以及卷创建原理和卷副本调度规则

一、添加磁盘-官网指引 重点在于: 1、比如你新增了一块盘,你需要做一下事情: 1、执行 lsblk 能找到你的盘。 2、然后执行 fdisk /dev/sdxx 分区你的盘。 3、然后对于分区部署文件系统, mkfs.xfs 4、然后执行 mount /dev/sdxxx 你…

【每日刷题】Day25

【每日刷题】Day25 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 238. 除自身以外数组的乘积 - 力扣(LeetCode) 2. 82. 删除排序链表中的重复…

数据结构练习:链表扩容

大致步骤: 一:创建一个新链表,遍历原链表的同时,将原链表的值复制给新链表 二:将新链表插入到原链表中(大致如下) 注: 1.头结点是不存有数据的 2.记得malloc后要free 3.*&是…

uniapp真机调试无法调用之前页面的方法

在uniapp通过getCurrentPages()页面栈调用之前页面方法,h5可生效但app真机调试找不到方法 let pages getCurrentPages()let beforePage pages[pages.length - 3]beforePage.refresh() //真机调试refresh为undefined解决: 后面…

5G前传光纤传输的25G光模块晶振SG2016CAN

一款适用于5G前传光纤传输网络中的25G光模块的5G晶振SG2016CAN。随着5G时代的到来,5G晶振的重要性也不言而喻,小体积宽温晶振SG2016CAN可以用于5G前传的25G光模块,具有高稳定性、小体积、宽温等优势。在5G前传光纤传输网络中,25G光…

操作系统课程--考纲要求

第一/二次课: 绪论 【学习内容与目标】 1、操作系统目标及定义 掌握操作系统的设置目标,理解并掌握操作系统的定义,了解操作系统的地位以及从资源管理者角度和用户角度了解操作系统的组成。 2、 操作系统的特征与功能 掌握操作系统的特征&…

吴恩达2022机器学习专项课程(一) 6.2 逻辑回归第三周课后实验:Lab2逻辑回归

问题预览/关键词 逻辑回归预测分类创建逻辑回归算法Sigmoid函数Sigmoid函数的表示sigmoid输出的结果Numpy计算指数的方法实验python实现sigmoid函数打印输入的z值和sigmoid计算的值可视化z值和sigmoid的值添加更多数据,使用逻辑回归可以正常预测分类![在这里插入图片…

【C++航海王:追寻罗杰的编程之路】C++11(四)

目录 1 -> 相关文章 【C航海王:追寻罗杰的编程之路】C11(一) 【C航海王:追寻罗杰的编程之路】C11(二) 【C航海王:追寻罗杰的编程之路】C11(三) 2 -> lambda表达式 2.1 -> C98中的一个例子 2.2 -> lambda表达式 2.3 ->…

【国产虚拟仪器】 NI-9205模块国产替代,±10 V,250 kS/s,16位,32通道C系列电压输入模块

10 V,250 kS/s,16位,32通道C系列电压输入模块 ​NI‑9205​可​执行​单​端​或​差分​模拟​输入,​每​个​具有​四​个​可​编​程​的​输入​范围。 该​模​块​以​较​低​的​价格​提供​了​高​通道​数​和​高…

Markdown编辑器的使用

欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Netperf网络测试

Netperf网络测试 Netperf简介安装NetperfCentos7安装NetperfWindows安装Netperf 批量网络流量性能测试启动netserver服务端 查看netperf帮助查看netper参数查看netserver参数 TCP_STREAM测试启动netserver服务端客户端 UDP_STREAM测试启动netserver服务端客户端 测试请求/应答网…

【Python】Python语言基础

1、运用python的输入输出函数 2、运行python的条件表达式 3、练习导入库函数并使用 1、运用输入输出函数编写程序,将华氏温度转换成摄氏温度。换算公式:C(F-32)*5/9,其中C为摄氏温度,F为华氏温度。 (1)源代码&#…

心理学上有个概念叫:习惯性反驳(附上解决办法)

在心理学上,有一个词,叫做习惯性反驳。 什么意思呢? 就是不管你说什么,他都要反驳你,最后把你带入负面的情绪黑洞,搞得你非常崩溃。 一个总是习惯性反驳的人,其实是非常可怕的。 习惯性反驳的3个…

.net EntityFramework EF

创建EF 方法1 方法二 安装的 版本是 中间没有弹出让选框架的界面, EF三种开发方式 1》》 db first 先设计数据库→然后在代码通过EF与数据库建立映射关系,是EF最早的一种使用方式,使用广泛.以数据库为驱动,生成实体模型,从而驱…

喀秋莎Camtasia2023中文破解Crack下载附安装教程 2023免费补丁百度云 电脑版注册机提取

Camtasia2023破解版是一款备受好评的电脑录屏软件,主要用于教授课程,培训他人,以及进行沟通和屏幕分享。内置视频编辑器支持拖放文本,提供了强大的屏幕录像、视频的剪辑和编辑、视频菜单制作、视频剧场和视频播放功能等&#xff0…

C#实现 IDbConnection / IDbCommand 等相关通用数据接口

目录 关于数据接口 对象执行流程 范例运行环境 设计与实现 引用 GetConnection方法 GetCommand方法 GetParameter方法 小结 关于数据接口 在.net 应用中,与数据库进行连接、访问和执行经常会用到数据接口的相关对象,如下: 1、 Con…

【深度学习实战(26)】标签处理之语义分割标签转换,数据集划分

一、标签转换 我们在使用labeme标签工具,标注完数据后会获得json文件。在标注结束过后,我们需要通过标签转换操作,生成jpg格式原始图片和png格式mask标签图。 1.1 使用img_b64_to_arr将json标签中二进制图像数据变成numpy格式数据&#xf…

场外个股期权是什么

场外个股期权是什么 场外个股期权是指在沪深交易所之外交易的个股期权,其本质是一种金融衍生品,允许投资者在股票交易场所外以特定价格买进或卖出证券。这种权利与股价变动情况紧密相关,使得投资者能够根据股价的变动情况对公司进行投票决定…

docker中的资源控制

前言 docker 使用cgrqup控制资源,K8S 里面也有limit(使用上限) docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 Control …

想要应聘前端工程师——学习路线指南

前端工程师学习路线 按照前端岗位需求,以优先学习工作更需要,面试更常考的内容为原则,由浅入深,层层铺垫,与时俱进,可以较容易地总结出前端学习路线图: HTML / CSS / JavaScript 基础学习 《Web 入门》 MDN 权威入门指南,HTML / CSS / JavaScript 快速上手 《CSS 世界…
最新文章