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

整合Shiro+Jwt

整合Shiro+Jwt大体思路

springboot整合shiro大体上的思路:

1.自定义一个类Realm extends AuthorizingRealm{}

主要是对token授权和认证

重写2个方法

doGetAuthorizationInfo  //授权
doGetAuthenticationInfo  //认证
认证 代码中手动加上对token校验的判断

2.自定义一个@Configuration类ShiroConfig

ShiroConfig类主要做3个事情

将自定义的Realm注册bean

将realm对象与securityManager对象关联  

securityManager.setRealm(realm);

将securityManager对象与ShiroFilterFactoryBean对象关联

shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager);

3.整合jwt

先定义公共类JwtUtils

其中定义三个方法 作用分别为token生成  token校验  token是否过期

在realm类的认证doGetAuthenticationInfo方法中调用JwtUtils解析token和登录用户是否满足条件

满足则返回AuthenticationInfo对象 对象中包含profile token name

(只需要定义个profile就好了  profile就是登录的用户信息  可以再定义一个用户实体类  把用户信息放入实体类中那这个对象类就是profile)

边学边整理思路  详细的得边敲边看代码

Shiro整合JWT的两种方式

1.通过URL进行权限控制:

  • 配置方式: 在Shiro的配置文件(通常是shiro.ini或shiro-config.xml)中配置URL路径与权限的映射关系。这个配置指定了哪些URL需要哪些权限。
<!-- shiro.ini或shiro-config.xml配置示例 -->
<property name="filterChainDefinitions"><!-- URL路径与权限的映射关系 -->/admin/** = roles[admin], perms["user:delete"]/user/** = authc
</property>

代码示例: 在Java代码中,只需配置Shiro的FilterChainDefinitionMap,将URL路径和权限映射起来。

Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/admin/**", "roles[admin]");
filterChainDefinitionMap.put("/user/**", "authc");

特点:

  • 静态配置:权限规则在配置文件中静态定义,不易动态改变。
  • 适用于简单的权限需求,不需要频繁修改权限规则。

2.通过注解进行权限控制:

  • 配置方式: 在需要进行权限控制的Controller类或方法上使用Shiro提供的注解,如@RequiresRoles@RequiresPermissions
@Controller
@RequestMapping("/admin")
public class AdminController {@RequiresRoles("admin")@GetMapping("/view")public String adminView() {// 处理业务逻辑return "admin/view";}
}

特点:

  • 动态控制:权限规则可以根据方法的注解动态变化,不需要重新配置。
  • 精细控制:可以根据方法级别的注解进行更精细的权限控制。

3.配置文件和注解的关系:

  • 在项目中,通常会将基本的URL路径与权限的映射关系配置在配置文件中,这些是项目的基础权限。然后,通过注解在Controller中进行更精细的权限控制,例如,限制某个Controller的某个方法需要特定的角色或权限。
<!-- shiro.ini或shiro-config.xml配置示例 -->
<property name="filterChainDefinitions"><!-- URL路径与基本权限的映射关系 -->/admin/** = roles[admin], perms["user:delete"]/user/** = authc
</property>
@Controller
@RequestMapping("/admin")
public class AdminController {@RequiresRoles("admin")@GetMapping("/view")public String adminView() {// 处理业务逻辑return "admin/view";}
}
  1. 这种组合方式可以实现项目中灵活的权限控制,基本权限由配置文件定义,而特殊权限由注解在代码中控制,使得权限管理更加清晰和可维护。

通过这种组合方式,您可以在项目中实现动态和精细的权限管理,同时保持基本权限的静态配置,以适应不同的权限需求。

对比说明

1. 通过URL进行权限控制:

首先,配置Shiro的过滤器和URL拦截规则,然后在控制器中添加注解。

Shiro配置文件 (shiro.ini 或 shiro-config.xml):

<!-- 配置JWTFilter,用于处理JWT的生成、解析和验证 -->
<bean id="jwtFilter" class="com.example.JWTFilter"></bean><!-- 配置Shiro过滤器链 -->
<filter-mappings><filter-name>jwtFilter</filter-name><url-pattern>/api/**</url-pattern>
</filter-mappings>

控制器 (AdminController.java):

@Controller
@RequestMapping("/admin")
public class AdminController {// 需要admin:view权限才能访问@GetMapping("/view")public String view() {return "admin/view";}// 其他业务方法
}

2. 通过注解进行权限控制:

在控制器方法上添加Shiro的注解来声明需要的角色或权限。

控制器 (AdminController.java):

@Controller
@RequestMapping("/admin")
public class AdminController {@RequiresPermissions("admin:view") // 使用注解声明需要admin:view权限@GetMapping("/view")public String view() {return "admin/view";}// 其他业务方法
}

上述代码演示了通过URL控制和通过注解控制权限的两种方式。通过URL控制更加基于URL模式,适用于相对简单的权限需求,可以在配置文件中进行集中管理。通过注解控制更加直观,能够明确指定每个方法的权限要求,适用于需要细粒度控制的情况。

合二为一:

Shiro配置文件 (shiro.ini 或 shiro-config.xml):

<!-- 配置JWTFilter,用于处理JWT的生成、解析和验证 -->
<bean id="jwtFilter" class="com.example.JWTFilter"></bean><!-- 配置Shiro过滤器链 -->
<filter-mappings><filter-name>jwtFilter</filter-name><url-pattern>/api/**</url-pattern>
</filter-mappings>

控制器 (AdminController.java):(注意两种方式代码基本一致,只是注释有区别)

@Controller
@RequestMapping("/admin")
public class AdminController {@RequiresPermissions("admin:view") // 使用注解声明需要admin:view权限@GetMapping("/view")public String view() {return "admin/view";}// 其他业务方法,例如编辑管理员信息,需要admin:edit权限@RequiresPermissions("admin:edit")@GetMapping("/edit")public String edit() {return "admin/edit";}// 删除管理员,需要admin:delete权限@RequiresPermissions("admin:delete")@GetMapping("/delete")public String delete() {return "admin/delete";}// 其他业务方法
}

在上述示例中,我们添加了更多的业务方法,如编辑管理员信息和删除管理员,并使用Shiro的@RequiresPermissions注解明确指定每个方法需要的权限要求。例如,edit方法需要admin:edit权限,delete方法需要admin:delete权限。

相关文章:

整合Shiro+Jwt

整合ShiroJwt大体思路 springboot整合shiro大体上的思路&#xff1a; 1.自定义一个类Realm extends AuthorizingRealm{} 主要是对token授权和认证 重写2个方法 doGetAuthorizationInfo //授权 doGetAuthenticationInfo //认证 认证 代码中手动加上对token校验的判断2.自…...

Python 图形化界面基础篇:创建工具栏

Python 图形化界面基础篇&#xff1a;创建工具栏 引言 Tkinter 库简介步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建工具栏步骤4&#xff1a;向工具栏添加工具按钮步骤5&#xff1a;处理工具按钮的点击事件步骤6&#xff1a;启动…...

基于matlab实现的卡尔曼滤波匀加速直线运动仿真

完整程序&#xff1a; clear clc %% 初始化参数 delta_t 0.1; %采样时间 T 8; %总运行时长 t 0:delta_t:T; %时间序列 N length(t); %序列的长度 x0 0; %初始位置 u0 0; %初速度 U 10; %控制量、加速度 F [1 delta_t 0 1]; %状态转移矩阵 B …...

windows Visual Studio 2022 opengl开发环境配置

1. 安装glew(GL), GLFW, glm, soil2-debug 还需要premake生成visual studio solution cmake for windows也要安装一个&#xff0c; 但是不用安装MinGW64, bug多 下载源码&#xff0c;找到xxx.sln文件用visual stidio打开solution编译代码&#xff0c;找到xxx.lib, xxx.dll文件…...

中国财政科学研究院党委书记、院长刘尚希一行莅临麒麟信安调研

为贯彻落实省委第十二届四次全会精神&#xff0c;加快推动湖南高质量发展&#xff0c;9月16日下午&#xff0c;由中国财政科学研究院党委书记、院长刘尚希&#xff0c;中国电子信息产业发展研究院总工程师秦海林&#xff0c;省委改革办副主任梁仲&#xff0c;省发展改革委党组成…...

基于element-ui的年份范围选择器

基于element-ui的年份范围选择器 element-ui官方只有日期范围和月份范围选择器&#xff0c;根据需求场景需要&#xff0c;支持年份选择器&#xff0c;原本使用两个分开的年份选择器实现的&#xff0c;但是往往有些是不能接受的。在网上找了很多都没有合适的&#xff0c;所以打…...

【已解决】您所使用的密钥ak有问题,不支持jsapi服务,可以访问该网址了解如何获取有效密钥。

您所使用的密钥ak有问题&#xff0c;不支持jsapi服务&#xff0c;可以访问该网址了解如何获取有效密钥。详情查看&#xff1a;http://lbsyun.baidu.com/apiconsole/key#。 问题 百度密钥过期 思路 注册成为开发者 如果还没注册百度地图api账号的&#xff0c;点击以后就进入…...

JS操作数组方法学习系列(1)

目录 数组添加元素 (push)数组移除末尾元素 (pop)数组添加元素到开头 (unshift)数组移除开头元素 (shift)数组查找元素索引 (indexOf)数组反向查找元素索引 (lastIndexOf)数组切割 (slice)数组连接 (concat)数组元素查找 (find 和 findIndex)数组元素过滤 (filter)数组元素映射…...

翻牌闯关游戏

翻牌闯关游戏 3关&#xff1a;关卡由少至多12格、20格、30格图案&#xff1a;12个玩法&#xff1a;点击两张卡牌&#xff0c;图案一到即可消除掉 记忆时长(毫秒)&#xff1a;memoryDurationTime:5000 可配置&#xff1a;默认5000 提示游戏玩法&#xff1a;showTipsFlag:1 可…...

CilckHouse创建表

一、引擎 一开始没注意有引擎选择&#xff0c;要用什么引擎去官方文档看看自己建的表适合什么引擎&#xff0c;大部分用MergeTree 二、用sql语句生成表 1、MergeTree引擎 原文地址&#xff1a;https://blog.csdn.net/qq_21383435/article/details/122812921?ops_request_misc%…...

高级运维学习(八)Ceph 概述与部署

ceph概述 ceph可以实现的存储方式&#xff1a; 块存储&#xff1a;提供像普通硬盘一样的存储&#xff0c;为使用者提供“硬盘”文件系统存储&#xff1a;类似于NFS的共享方式&#xff0c;为使用者提供共享文件夹对象存储&#xff1a;像百度云盘一样&#xff0c;需要使用单独的客…...

【图像处理】VS编译opencv源码,并调用编译生成的库

背景 有些时候我们需要修改opencv相关源码&#xff0c; 这里介绍怎么编译修改并调用修改后的库文件。 步骤 1、下载相关源码工具&#xff1a; 下载opencv4.8源码并解压 https://down.chinaz.com/soft/40730.htm 下载VS2019&#xff0c;社区版免费 https://visualstudio.micro…...

STM32 EtherCAT 总线型(1 拖 4)步进电机解决方案

第 1 章 概述  技术特点  支持标准 100M/s 带宽全双工 EtherCAT 总线网络接口及 CoE 通信协议一 进一出&#xff08;RJ45 接口&#xff09;&#xff0c;支持多组动态 PDO 分组和对象字典的自动映射&#xff0c;支持站 号 ID 的自动设置与保存&#xff0c;支持 SDO 的…...

Postman应用——测试脚本Test Script

文章目录 Test Script脚本CollectionFolderRequest 解析响应体断言测试 测试脚本可以在Collection、Folder和Request的Pre-request script 和 Test script中编写&#xff0c;测试脚本可以检测请求响应的各个方面&#xff0c;包括正文、状态代码、头、cookie、响应时间等&#x…...

JS的网络状态以及强网弱网详解

文章目录 1. online 和 offline 事件2. navigator.onLine2.1 什么是 navigator.connection&#xff1f;2.2 如何使用 navigator.connection&#xff1f;2.3 总结 1. online 和 offline 事件 online 和 offline 事件是浏览器自带的两个事件&#xff0c;可以通过添加事件监听器来…...

大数据-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…...

详述RPA项目管理流程,RPA项目管理流程是什么?

RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;是一种通过软件机器人模拟人类在计算机上执行重复性任务的技术。RPA可以帮助企业提高工作效率、降低成本、减少错误并提高客户满意度。然而&#xff0c;为了确保RPA项目的成功实施&#xff…...

爬虫 — Js 逆向

目录 一、概念1、爬虫2、反爬虫3、加密解密4、加密5、步骤 二、常用加密方式1、加密方式2、常见加密算法3、JS 中常见的算法4、MD5 算法4.1、MD5 加密网站4.2、特点 5、DES/AES 算法6、RSA 算法7、base64 算法 三、环境配置1、node.js 环境配置2、PyCharm 环境配置 一、概念 1…...

Python 网络爬取的时候使用那种框架

尽管现代的网站多采取前后端分离的方式进行开发了&#xff0c;但是对直接 API 的调用我们通常会有 token 的限制和可以调用频率的限制。 因此&#xff0c;在一些特定的网站上&#xff0c;我们可能还是需要使用网络爬虫的方式获得已经返回的 JSON 数据结构&#xff0c;甚至是处理…...

CentOS7安装源设置

此处的安装源地址需要填写&#xff1a;&#xff08;适用于centos7&#xff09; http://mirrors.aliyun.com/centos/7/os/x86_64/...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...