Java学习第八十一部分——Shiro

目录

📫 一、前言提要简介

🛡️ 二、核心功能介绍

⚙️ 三、核心架构组件

☕ 四、与Java的关系

⚖️ 五、与Spring Security对比

🧩 六、典型应用场景

💎 七、总结归纳概述


📫 一、前言提要简介

       Apache Shiro 是一个强大且易用的Java 安全框架​,由 Apache 软件基金会维护,专为 Java 平台设计,提供全面的安全管理功能。

🛡️ 二、核心功能介绍

1.​​身份认证(Authentication)​

验证用户身份(如登录校验),支持多种方式:用户名密码、LDAP、Active Directory、JWT 等。

2.​​授权(Authorization)​

控制用户访问权限,支持​​基于角色​​(RBAC)和​​基于资源​​的细粒度权限控制(例如校验用户能否删除订单)。

​3.会话管理(Session Management)​

统一管理用户会话,适用于 Web 和非 Web 环境(如命令行应用),支持分布式会话存储(如 Redis)。

​4.加密(Cryptography)​

内置加密工具(如 MD5、SHA 散列、AES 加密),保障敏感数据(如密码)的安全存储。

5.​​其他辅助功能​

  • ​缓存机制​​:缓存用户权限信息,提升性能。

  • ​“记住我”​​:支持用户免重复登录。

  • ​Web 集成​​:通过过滤器(如 authcperms)拦截请求,实现 URL 级安全控制。

⚙️ 三、核心架构组件

Shiro 通过三层组件协同工作:

1.​​Subject​

代表当前操作用户(人或系统),开发者通过 Subject API 直接调用登录、授权等方法。

2.​​SecurityManager​

​​核心控制器​​(类似 Spring MVC 的 DispatcherServlet),管理所有安全操作(认证、授权、会话),并调度其他组件。

3.​​Realm​

安全数据源桥梁​​,连接应用数据(如数据库、LDAP)。开发者需自定义 Realm,提供用户信息及权限数据。

// 示例:自定义Realm 实现认证与授权逻辑
public class CustomRealm extends AuthorizingRealm {@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {// 认证逻辑(校验用户名密码)}@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 授权逻辑(加载用户权限)}
}

☕ 四、与Java的关系

1.​​Java 原生支持​

完全基于 Java 开发,无缝运行于 ​​Java SE​​ 和 ​​Java EE​​ 环境,独立于容器(如 Tomcat)和框架(如 Spring)。

​2.广泛集成能力​

兼容主流 Java 生态:Spring/Spring Boot、JPA、MyBatis、Thymeleaf 等。

3.​​跨场景适用​

支持 Web 应用、微服务、单点登录(SSO)、RESTful API 及后台服务。

⚖️ 五、与Spring Security对比

特性ShiroSpring Security
​易用性​✅ 设计简洁,API 直观❌ 配置复杂,学习曲线陡峭
​灵活性​✅ 独立运行,不依赖 Spring❌ 深度绑定 Spring 生态
​功能覆盖​覆盖核心安全需求更丰富(如 OAuth2 原生支持)
​适用场景​轻量级应用、快速集成大型 Spring 项目、复杂权限管理

💡 ​​结论​​:Shiro 适合追求​​快速实现、轻量集成​​的 Java 项目;Spring Security 更适合深度依赖 Spring 生态的复杂系统。

🧩 六、典型应用场景

1.​​Web 应用权限控制​

通过 URL 拦截(如 /admin/**=roles[admin])管理页面访问权限。

2.​​API 安全​

为 RESTful 服务提供 Token 认证(如 JWT)和接口级授权。

3.​​单点登录(SSO)​

统一多系统登录态,减少重复认证。

4.​​数据加密​

敏感数据(如密码)散列存储,防止泄露。

💎 七、总结归纳概述

       Apache Shiro 作为 ​​Java 安全领域的轻量级解决方案​​,以简洁的 API、灵活的扩展性和低耦合度,成为快速构建安全系统的优选。其与 Java 的深度整合及跨环境适配能力,尤其适合中小型项目或需脱离 Spring 生态的场景。对于复杂权限需求,可结合 Spring Security 或 OAuth2 扩展。

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

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

相关文章

虚拟机ubuntu20.04共享安装文件夹

ubuntu20.04共享安装文件夹 4.5 共享安装文件夹 将Windows存放安装文件的文件夹共享给虚拟机,如下图操作:如果是在ubuntu20.04中,还需要以下的操作: sudo mkdir /mnt/hgfs 此命令无效 sudo echo ‘vmhgfs-fuse /mnt/hgfs fu…

如何查看电脑后门IP和流量?

你是否也有以下经历?深夜,你的电脑风扇突然狂转,屏幕却一片寂静;每月流量莫名超标,账单高得离谱;鼠标偶尔不听使唤…这些可能不是电脑“闹脾气”,如何一探究竟? 想象一下&#xff1a…

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测

分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测 目录分类预测 | MATLAB基于四种先进的优化策略改进蜣螂优化算法(IDBO)的SVM多分类预测分类效果基本介绍多策略量子自适应螺旋搜索算法研究摘要1. 引言1.1 研究背景1.2 研究意义1.3 研究目标2. 文…

Android 修改系统时间源码阅读

链接:XRefAndroid - Support Android 16.0 & OpenHarmony 5.0 (AndroidXRef/AospXRef) 这里看的Android 10的代码,选中Android 10,勾选所有工程,搜索DateTimeSettings‌: 看到showTimePicker应该是显示一个设置时…

关于自定义域和 GitHub Pages(Windows)

GitHub Pages 支持使用自定义域,或将站点 URL 的根目录从默认值(例如 )更改为您拥有的任何域,比如octocat.github.io。 谁可以使用此功能? GitHub Pages 在公共存储库中提供 GitHub Free 和 GitHub Free for organizations,在公共和私有存储库中提供 GitHub Pro、GitHub …

自动驾驶领域中的Python机器学习

数据预处理与特征工程 在自动驾驶系统中,数据是驱动决策的核心。从传感器(如摄像头、激光雷达、毫米波雷达)收集的原始数据通常包含噪声、缺失值和异常值,需要进行系统的预处理。Python的pandas库提供了强大的数据处理能力&#x…

PROFINET转CAN通讯协议转换速通汽车制造

在汽车系统领域之外,控制器局域网(CAN)总线技术亦广泛应用于多种工业环境。其固有的稳健性、可靠性与灵活性,使其成为工业自动化及控制系统中设备间通信的理想选择。CAN 总线技术在工业应用中的关键领域包括机器控制、传感器网络以…

影刀RPA_小红书笔记批量采集_源码解读

一、项目简介本项目是一个基于影刀RPA的小红书笔记批量采集工具,能够通过两种模式获取小红书平台的软文数据:搜索内容抓取和自定义链接抓取。工具使用Chrome浏览器自动化技术,实现了从网页数据采集、解析到Excel导出的完整流程。支持获取笔记…

以使命为帆,结业是重新出发的号角

站在私教班结业典礼的讲台上,望着眼前一张张闪烁着力量的面孔,我心中始终萦绕着一个信念:所有的相遇,都是为了共同奔赴一件更有意义的事。今天不是终点,而是 “使命的启程”—— 我们因不甘而相聚:不甘心行…

java测试题(下)

1. Spring 核心概念1.1 如何理解 Spring DI?DI(依赖注入) 是 IoC(控制反转) 的具体实现方式,由 Spring 容器在运行时通过以下方式自动注入依赖:构造器注入(推荐)Setter 注…

LC振荡Multisim仿真

电路图:说明:点击仿真后,先打开S1,可以看到C1的充电曲线。当电容充满电后,关闭S1,打开S2,这时候,C2电容会快速获得C1一半的电量。如果没有L,曲线会变得很陡。如果只加入电…

五、Web开发

文章目录1. SpringMVC自动配置概览2. 简单功能分析2.1 静态资源访问2.1.1 静态资源目录2.1.2 静态资源访问前缀2.1.3 webjar2.2 欢迎页支持2.3 自定义 Favicon2.4 静态资源配置原理2.4.1 配置类只有一个有参构造器2.4.2 资源处理的默认规则2.4.3 欢迎页的处理规则2.4.4 favicon…

Mysql 二进制安装常见问题

1. mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory在centos9中升级了libncurses.so的版本为libncurses.so.6,所以找不到libncurses.so.5需要使用软连接指向libncurses.so.6ln -s /lib6…

OpenLayers 综合案例-点位聚合

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二 作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路! OpenLayers…

测试老鸟整理,物流项目系统测试+测试点分析(一)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 物流项目&#xf…

好的编程语言设计是用简洁清晰的原语组合复杂功能

首先,函数命名要user friendly,比如最常用的控制台输入输出,input scanf gets read readln readline print println writeline… 我专门询问了chatgpt,让它给出流行度百分比最高的组合(ai干这个最在行)&…

基于springboot的在线购票系统/在线售票系统

用户:注册,登录,影院信息,即将上映,电影信息,新闻公告,取票管理,电影评价管理,我的收藏管理,个人中心管理员:登录,个人中心&#xff0…

Spring Boot项目打包部署常见问题解决方案

问题一:JAR包缺少主清单属性 问题描述 在使用 java -jar 命令启动Spring Boot项目时,遇到以下错误: demo-service.jar中没有主清单属性问题原因 pom.xml 中 spring-boot-maven-plugin 配置不正确打包时跳过了主清单文件的生成主类&#xff08…

【分享】外国使馆雷电综合防护系统改造方案(一)

1防雷项目设计思想:1.1设计依据:依据中国GB标准与部委颁发的设计规范的要求,该建筑物和大楼内之计算机房等设备都必须有完整完善之防护措施,保证该系统能正常运作。这包括电源供电系统、不间断供电系统,空调设备、电脑…

数据结构预备知识

在学习数据结构之前,有些知识是很有必要提前知道的,它们包括:集合框架、复杂度和泛型。本篇文章专门介绍这三个东西。1.集合框架1.1 什么是集合框架Java 集合框架(Java Collection Framework),又被称为容器,是定义在 j…