Shiro 简单入门

Apache Shiro 是一个强大且灵活的 Java 安全框架,用于处理身份验证、授权、加密和会话管理等任务。Shiro 的设计目标是提供一种简单而直观的方式来处理安全问题,使开发人员能够轻松集成和管理应用程序的安全性。以下是对 Shiro 的详细讲解:

一、Shiro 的核心概念

  1. Subject: 代表当前用户的安全操作主体。可以是人、第三方服务、守护进程或其他任何尝试与应用交互的实体。Subject 是 Shiro 的核心接口,所有与安全相关的操作都是通过 Subject 来执行的。

  2. SecurityManager: Shiro 的核心接口,用于管理所有的安全操作。SecurityManager 类似于 Spring Security 中的 ProviderManager。所有的 Subject 都通过 SecurityManager 进行安全性操作的管理。

  3. Realm: 用于连接应用程序的安全数据源。Realm 相当于 DAO(Data Access Object),负责从数据源(如数据库、LDAP 等)中获取安全数据(如用户信息、角色、权限等)。

  4. Session: Shiro 的会话管理功能比 Java EE 的标准会话管理更强大,可以跨多个平台(如 Web 应用、非 Web 应用)使用。

二、Shiro 的工作流程

Shiro 的基本工作流程可以分为以下几个步骤:

  1. 认证(Authentication): 验证用户身份,即用户登录。通过 Subject.login(token) 方法进行。
  2. 授权(Authorization): 验证用户是否有权执行某个操作,即权限检查。通过 Subject.checkRole(roleIdentifier)Subject.checkPermission(permission) 方法进行。
  3. 会话管理(Session Management): 管理用户会话,包括创建、维护和销毁会话。
  4. 加密(Cryptography): 提供加密和解密功能,以确保数据的安全性。

三、Shiro 的核心组件

1. 配置文件

Shiro 的配置文件通常是 shiro.ini 或 Spring 配置文件,通过配置文件可以定义 RealmSecurityManager 等组件。

[main]
# Define the custom Realm
myRealm = com.example.MyRealm# Define the SecurityManager
securityManager.realm = $myRealm
2. Realm 实现

Realm 用于获取安全数据,可以自定义实现 Realm 接口或继承 AuthorizingRealm 类。

public class MyRealm extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 获取用户角色和权限信息SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();// 添加角色和权限info.addRole("admin");info.addStringPermission("user:manage");return info;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 获取用户名和密码并进行验证String username = (String) token.getPrincipal();String password = new String((char[]) token.getCredentials());// 验证用户名和密码if (!"admin".equals(username) || !"123456".equals(password)) {throw new AuthenticationException("Username or password incorrect");}return new SimpleAuthenticationInfo(username, password, getName());}
}
3. 使用 Shiro 进行认证和授权
public class ShiroExample {public static void main(String[] args) {// 加载 Shiro 配置文件Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");SecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);// 获取当前用户Subject currentUser = SecurityUtils.getSubject();// 登录if (!currentUser.isAuthenticated()) {UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {currentUser.login(token);System.out.println("Login successful!");} catch (AuthenticationException ae) {System.out.println("Login failed: " + ae.getMessage());}}// 检查角色和权限if (currentUser.hasRole("admin")) {System.out.println("User has admin role.");}if (currentUser.isPermitted("user:manage")) {System.out.println("User has user:manage permission.");}// 登出currentUser.logout();}
}

四、Shiro 的扩展功能

  1. Remember Me: 记住我功能,可以在用户关闭浏览器后仍然保持登录状态。
  2. 会话管理: 支持跨平台的会话管理,提供更灵活的会话持久化和管理策略。
  3. 单点登录(SSO): 支持单点登录功能,可以与第三方系统集成。
  4. 加密/解密: 提供内置的加密和解密工具类,支持多种加密算法。

结论

Apache Shiro 是一个功能强大且易于使用的安全框架,适用于各种类型的 Java 应用程序。通过 SubjectSecurityManagerRealm 等核心组件,Shiro 提供了简洁且灵活的身份验证和授权机制。此外,Shiro 的会话管理和加密功能也增强了应用程序的安全性。理解 Shiro 的底层原理和工作流程,可以帮助开发人员更好地应用和扩展这个框架,以满足各种复杂的安全需求。

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

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

相关文章

Linux实用命令练习

目录 一、常用命令 二、系统命令 三、用户和组 四、权限 五、文件相关命令 六、查找 七、正则表达式 八、输入输出重定向 九、进程控制 十、其他命令 1、远程文件复制&#xff1a;scp 2、locate查找 3、which命令 4、设置或显示环境变量&#xff1a;export 5、修…

学习Symfony框架

学习Symfony框架&#xff0c;一个流行的PHP Web应用框架&#xff0c;你可以遵循以下几个步骤来逐步掌握它&#xff1a; ### 1. 了解Symfony框架 - **研究架构和理念**&#xff1a;了解Symfony的设计原则&#xff0c;如可重用组件、模块化、面向对象编程、以及MVC&#xff08;模…

YOLO-V1

一、YOLO-V1整体思想与网络架构 1.1 YOLO算法整体思路解读 YOLO-V1: 经典的one-stage方法 把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01; 可以对视频进行实时检测&#xff0c;应用领域非常广&#xff01; 核心思想&#xff1a; 1、预测一张图像中有哪些物…

kafka 集群 Topic 之 Partion 数据写入分布原理设计(六)

kafka 集群 Topic 之 Partion 数据写入分布原理设计(六) 集群中假如有三个节点,分别ip为200,201,202 创建topic 为test,默认分区2,副本2,在写入消息 到topic时,数据就转的过程是什么,则 partition存储数据分布是如何分布的,各个节点数据如何同步 的,isr如何实现的?…

11_电子设计教程基础篇(磁性元件)

文章目录 前言一、电感1、原理2、种类1、制作工艺2、用途 3、参数1、测试条件2、电感量L3、品质因素Q4、直流电阻&#xff08;DCR&#xff09;5、额定电流6、谐振频率SRF&#xff08;Self Resonant Frequency&#xff09;7、磁芯损耗 4、应用与选型 二、共模电感1、原理2、参数…

《昇思25天学习打卡营第15天 | 昇思MindSpore基于MindSpore的红酒分类实验》

15天 本节学了通过MindSpore的完成红酒分类。 1.K近邻算法&#xff08;K-Nearest-Neighbor, KNN&#xff09;是一种用于分类和回归的非参数统计方法&#xff0c;是机器学习最基础的算法之一。 1.1分类问题 1.2回归问题 1.3距离的定义 2.数据处理 2.1 数据准备 2.2 数据读取与处…

动画重定向——当给一个人物模型用别人物的动画时,会遇到人物与动画不匹配问题,怎么解决呢?

每日一句&#xff1a;实践出真知&#xff0c;试错方确信 目录 最开始我想的原因&#xff01; 分析一下动画相关参数 Animator组件参数详解&#xff1a; 人物模型的导入设置参数&#xff1a; Skinned Mesh Renderer组件详解: Skinned Mesh Renderer工作原理 设置Skinned …

npm常用命令使用与事件案例

概述 npm&#xff08;Node Package Manager&#xff09;是一个JavaScript编程语言的包管理器&#xff0c;用于Node.js应用程序。它允许用户安装、共享和管理具有重复使用价值的代码&#xff08;包&#xff09;&#xff0c;这些代码可以是库、工具或应用程序。 npm常用命令详解…

AI大模型的崛起:第四次工业革命的前奏?

在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;大模型的崛起引起了广泛的关注和讨论。有人将其视为第四次工业革命的前奏&#xff0c;然而&#xff0c;这真的可能吗&#xff1f;本文将探讨这一问题&#xff0c;并对中国AI大模型的发展进行简要分析。…

MyBatis第一节

目录 1. 简介2. 配置3. doing3.1 创建一个表3.2 打开IDEA&#xff0c;创建一个maven项目3.3 导入依赖的jar包3.4 创建entity3.5 编写mapper映射文件(编写SQL)3.6 编写主配置文件3.7 编写接口3.8 测试 参考链接 1. 简介 它是一款半自动的ORM持久层框架&#xff0c;具有较高的SQ…

Qt:4.信号和槽

目录 1.信号源、信号和槽&#xff1a; 2.Qt类的继承关系&#xff1a; 3.自定义槽函数&#xff1a; 4.第一种信号和槽的连接的方法&#xff1a; 5.第二种信号和槽的连接的方法&#xff1a; 6.自定义信号&#xff1a; 7.发射信号&#xff1a; 8.信号和槽的传参&#xff1a;…

神经网络在机器学习中的应用:手写数字识别

机器学习是人工智能的一个分支&#xff0c;它使计算机能够从数据中学习并做出决策或预测。神经网络作为机器学习的核心算法之一&#xff0c;因其强大的非线性拟合能力而广泛应用于各种领域&#xff0c;包括图像识别、自然语言处理和游戏等。本文将介绍如何使用神经网络对MNIST数…

《昇思25天学习打卡营第17天 | 昇思MindSporeCycleGAN图像风格迁移互换》

17天 本节学习了CycleGAN图像风格迁移互换。 CycleGAN即循环对抗生成网络&#xff0c;该模型实现了一种在没有配对示例的情况下学习将图像从源域 X 转换到目标域 Y 的方法。该模型一个重要应用领域是域迁移&#xff0c;可以通俗地理解为图像风格迁移。其实在 CycleGAN 之前&a…

WP黑格导航主题BlackCandy

BlackCandy-V2.0全新升级&#xff01;首推专题区(推荐分类)更多自定义颜色&#xff01;选择自己喜欢的色系&#xff0c;焕然一新的UI设计&#xff0c;更加扁平和现代化&#xff01; WP黑格导航主题BlackCandy

【高考志愿】水利工程

目录 一、专业概述 二、主要专业课程与实习实训 三、就业方向 四、选择水利工程专业的注意事项 五、未来职业发展 六、水利工程专业排名 高考志愿选择水利工程专业时&#xff0c;考生应综合考虑多方面因素。以下是对水利工程专业的详细介绍&#xff0c;以帮助考生做出更明…

Oracle内部bug导致的19c DG备库宕机

Oracle内部bug导致的19c DG备库宕机 报错信息收集原因与受影响版本Workaround与解决办法报错信息收集 数据库版本: SQL> select banner,banner_full,banner_legacy from v$version;BANNER ----------------------------------------------------------------------------…

计算机科学基础简单介绍(1—6)

计算机影响了我们生活的方方面面&#xff0c;在我们这个时代完全渗透了我们的生活。 最早是算盘、星盘、时钟、尺卡等古老的计算工具&#xff0c;后来出现了进步计算机&#xff0c;类似与汽车里程表的一种机械工具&#xff0c;但是他也是手工制品。经过历史的演变与发展&#x…

gbase 8c分布式升级步骤

GBase 8c 多模多态企业级分布式数据库具备高性能、高可用、弹性伸缩、高安全性等特性&#xff0c;可以部署在物理机、虚拟机、容器、私有云和公有云&#xff0c;为关键行业核心系统、互联网业务系统和政企业务系统提供安全、稳定、可靠的数据存储和管理服务。GBase 8c支持行存、…

第十四站:Java玫瑰金——移动开发的新篇章

Java作为一门历史悠久的编程语言&#xff0c;在移动开发领域尤其是Android平台上有着不可替代的地位。尽管Kotlin因其简洁性和现代特性在2017年被Google宣布为Android官方推荐的开发语言&#xff0c;Java依然保持着其在移动开发中的重要性。以下是Java在移动开发中的一些关键点…

大数据之路 读书笔记 Day2

大数据之路 读书笔记 Day2 日志采集——浏览器的页面采集 一、分类 #mermaid-svg-8c9sRexRDdSB9pWA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8c9sRexRDdSB9pWA .error-icon{fill:#552222;}#mermaid-svg-8c9…