shiro权限不生效原因分析

SpringBoot整合shiro同时解决注解权限不生效(附源码) 1.shiro apache出品的很好用的权限框架,理论上来说只需要程序员配置两个类,shiro就能为我们工作起来。 这几天研究shiro,集成到springboot中,并使用注解权限,踩了不少坑,希望这篇文章能够帮助到大家 本文我将讲述一下springboot整合shiro,使用 @RequiresPermissions 进行控制器权限控制 1.数据库表设计 具体sql文件以及初始化数据... 阅读详情

shiro遇到的坑

-项目中使用shiro做登录校验和权限管理,在配置权限时遇到小坑,记录一下。

环境:springboot+freemarker+shiro

场景:后台管理,配置菜单以及按钮权限,分为三个层级,一二级暂时只考虑是否查看权限,第三层级为页面按钮权限,分增删改查。详情看图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFXMk8rQ-1577168642794)(https://i.imgur.com/T6CefOz.png)]
问题:一二层级正常,第三层级权限不起作用!

权限标签定义如下:

标签定义页面一页面二
第一层级one:viewtwo:view
第二层级one:page1:viewtwo:page2:view
第三层级one:page1:view:addtwo:page2:view:add

开始怀疑是数据库没有录入,查看后权限标签与角色已对应,排除。

后面怀疑是页面问题,后面把第三层级标签与第一二层级同一页面,依然不起作用,排除。

后面怀疑是权限标签定义问题,把第三层级标签改为one:page1:data:add,奇迹出现,权限生效。证实权限标签定义出了问题。

##问题原因:权限标签定义问题
但是后来想想为什么会出现这种问题,每个标签都是独一无二的,对此我对shiro对于权限标签的校验产生了兴趣,查看源码,一路debug后最终在org.apache.shiro.authz.permission中看到了关键所在,核心代码如下

、、、
//当这个方法返回true时说明有此权限
//这个p是代表当前循环匹配到的权限标签
public boolean implies(Permission p) {
// By default only supports comparisons with other WildcardPermissions
if (!(p instanceof WildcardPermission)) {
return false;
}

    WildcardPermission wp = (WildcardPermission) p;
	//把当前标签转分割成一个set集合(如one:page1:view:add 会分割成[[one], [page1], [view], [add]])
    List<Set<String>> otherParts = wp.getParts();

    int i = 0;
	//循环匹配权限标签
    for (Set<String> otherPart : otherParts) {
        // If this permission has less parts than the other permission, everything after the number of parts contained
        // in this permission is automatically implied, so return true
		//当全部循环匹配完没有返回false,则返回true,这个getparts()方法是获取当前角色当前循环的权限标签([[one], [page1], [view]])
        if (getParts().size() - 1 < i) {
            return true;
        } else {
            Set<String> part = getParts().get(i);
			/*如果包含有‘*’而且不包含当前分割后的标签则返回false,
			 *当用户可以查看页面,也就是说当前角色拥有one:page1:view标签
			 *这里【!part.contains(WILDCARD_TOKEN)】返回true,第二个【part.containsAll(otherPart)】one会跟当前标签匹**配one,
			 *也就是说这里全部循环完返回的都是false,所以最后都没true,于是在上面返回了一个true。
            if (!part.contains(WILDCARD_TOKEN) && !part.containsAll(otherPart)) {
                return false;
            }
            i++;
        }
    }

、、、

##总结:通过分析,我们看到了shiro在定义权限标签时,要主意匹配问题,不要存在包含问题,类似aaa 和aaab ,会导致后面标签失效。

shiro实现免密登录,解决三方登录问题 问题: 之前在一个项目中,需要实现短信快捷登录,当输入手机号获取验证码且验证码正确时,通过数据库查询出用户,而由于使用了shiro对密码进行了加密,导致查询出来的用户密码时加密的,不能够进行登录。 解决办法: 1.定义一个枚举代码如下 public enum LoginType { PASSWORD(&quot;password&quot;), // 密码登录 NOPASSWD(&quot;nopassword... 阅读详情

相关推荐

JS中处理Shiro的权限标签问题

JSP中直接引用Shiro标签比较简单可以参考JSP / GSP 标签库-Shiro权限学习1:http://blog.youkuaiyun.com/ahou2468/article/details/71130582 JS中引用Shiro的标签不起作用的问题解决方法: 1.第一种情况假如js中生成标签代码是固定死的解决起来比较容易,直接在需要权限判断标签前和后加上权限控制标签,即可以起作用

Tiger的专栏 2万+

shiro权限不生效原因

shiro权限不生效原因记录一次shiro权限不生效原因。 记录一次shiro权限不生效原因。 访问权限配置不能是HashMap,必须使用LinkedHashMap。其实根本原因就是顺序的问题。 ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); //给ShiroFilter配置安全管理器 shiroFilterFactoryBean.setSecurityManager(secu

anan7741的博客 3115

QoderWake 与 Qoder 工具生态详解

Qoder CLIQoder SDKQoderWake谁在用你(开发者)你的程序你的数字员工谁在跑你的终端会话你的应用进程Daemon 后台进程什么时候跑你启动时你的代码调用时7×24 持续运行怎么触发键盘输入函数调用定时/事件/API/IM有记忆吗会话级 + 文件无多层持久记忆能协作吗Subagent多 Waker + IM 群组核心价值编码效率集成灵活性自主生产力一句话总结。

驽马不舍 950

SpringBoot3整合Shiro未生效问题

在使用 SpringBoot3.1.0 对 Shiro 进行整合后,无法生效

? 4061

直击痛点:VS2015离线安装报错“安装包丢失或损坏”的根源分析与精准修复

本文深入剖析了Visual Studio 2015离线安装时出现“安装包丢失或损坏”报错的根本原因,指出问题核心在于安装程序固化的临时路径查找逻辑。文章提供了一步到位的精准修复方案,通过将ISO镜像中的完整packages文件夹复制到安装程序指定的临时路径,即可无需联网、无需操作证书直接解决问题,并对比分析了其他常见方法的局限性。

weixin_27734811的博客 357

第十一届全国大学生GIS应用技能大赛——广西区域发展布局示意图

我们需要制作一幅广西区域发展布局示意图,最终成图参考“数据”文件夹中的广西区域发展布局示意图.png。地图使用的投影坐标系是 Asia_North_Albers_Equal_Area_Conic,其中地理坐标系是China_Geodetic_Coordinate_System_2000,中央经线东经 105°,标准纬线是北纬 25°和北纬 47°,出图比例尺 1:4,780,000。

@HNUSTer的博客 7798

shiro新添加权限不生效

springboot+shiro的项目,两月前添加的权限都可以正常用,今天由于项目需要再完善一下权限,结果添加的所有权限都不能生效,反复看了多次代码,没有漏写或者错写代码,整个人都给整郁闷了。 中午睡了一觉后,优快云找解决办法吧,于是找到下文大佬的经验帖,成功解决,在此感谢这位大佬! 大佬博客链接https://blog.youkuaiyun.com/bubble21/article/details/78829959 问题分析: 权限标签定义的时候,每层尽量不要与已存在的上层出现重复或包含关系,例如 第一.

qq_41419769的博客 453

立创·庐山派-K230-CanMV(嘉楠勘智)开发板通过ATK-ESP8266实现图像识别数据无线传输与原子云对接

本文详细介绍了如何利用立创·庐山派K230开发板与ATK-ESP8266模块实现图像识别数据的无线传输及与原子云平台的对接。通过硬件连接、环境配置、代码实现及调试技巧的讲解,为开发者提供了一套完整的物联网解决方案,特别适用于智能监控和边缘计算场景。

study的专栏 950

最全Shiro教程,一篇学会Shiro权限管理

声明:本文是博主观看bilibili上Java涛哥视频学习的Shiro框架所整理笔记,学完思路清晰,原文代码大致相同,原视频链接附上,方便以后学习查看。 Shiro ​ Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。 一、权限管理 不同身份的人进入系统所完成的操作不同,如下图,当一个系统包含左侧所有菜单功能时,要求不同人员登录展示不

老达摩的博客 3万+

Dify工作流构建案例:迭代驱动的多维深度搜索

为了克服这些挑战,我们可以设计一个能够智能协同内部知识库与外部互联网搜索,并最终由大型语言模型(LLM)进行深度整合与精准回答的高级工作流。

同名公众号:dify实验室 2291

六种光耦综合对比——《器件手册--光耦》

可控硅输出光耦(SCR Optocoupler)是一种特殊的光电耦合器,由红外发光二极管(LED)和双向可控硅(SCR)组成,用于实现输入和输出之间的电气隔离和信号传输。逻辑输出光耦是一种高效、可靠的数字信号隔离和电平转换器件,通过电气隔离和逻辑电平输出,确保了系统的安全性和信号的稳定性。固态继电器(可控硅输出,SSR)是一种无触点电子开关设备,利用可控硅(SCR或Triac)作为主要开关元件,通过光耦合器实现输入和输出之间的电气隔离。光耦作为一种成熟的电气隔离器件,在电子电路设计中具有重要的地位。

XU157303764的博客 1726

Shiro <shiro:hasPermission 标签不生效,shiro权限不生效原因

第一个可能配置文件:shiroConfig.java没加这个 /** * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证 * 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能 * @return */ @Bean @ConditionalO

ZGIT的博客 7760

YOLOv11的嗅觉传感器数据关联-(特殊场景下的气味-视觉联合分析)

摘要 本文探讨了YOLOv11与嗅觉传感器融合的多模态感知技术。通过分析YOLOv11的架构特性与嗅觉传感器的数据特点,提出了三种融合策略:数据级、特征级和决策级融合。系统采用硬件同步方案实现时空对齐,包含视觉采集模块、嗅觉传感模块和边缘计算单元。环境配置基于Python 3.9和PyTorch 2.0,支持实时多模态数据处理。该技术可应用于环境监测、工业检测等场景,突破单一视觉感知的局限性。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 625

Shiro <shiro:hasPermission >标签不生效,shiro权限不生效原因

第一个可能配置文件:shiroConfig.java没加这个 /** * 开启Shiro的注解(如@RequiresRoles,@RequiresPermissions),需借助SpringAOP扫描使用Shiro注解的类,并在必要时进行安全逻辑验证 * 配置以下两个bean(DefaultAdvisorAutoProxyCreator和AuthorizationAttributeSourceAdvisor)即可实现此功能 * @return */ @Bean @ConditionalO

cristianoxm的博客 3393

llama2-7b下载并转llama-2-7b-hf

④输入https://github.com/huggingface/transformers/blob/main/src/transformers/models/llama/convert_llama_weights_to_hf.py会下载 convert_llama_weights_to_hf.py 文件,我们需要用到这个文件将llama2-7b转成llama-2-7b-hf。③下载完之后是这四个文件,这里我是在windows操作系统中安装的WSL,没有linux操作系统,没办法。

wenling54321的博客 1030

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

解决Shiro权限注解不生效的问题

在我们的Shiro配置文件中,我的配置文件叫:shiroConfig.java 将我下面缩写的东西添加到spring里面进行注入,注解就生效了。 /** * @description:开启代码权限注解支持 */ @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){ AuthorizationAttrib...

Java日常记录 1416

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

shiro中@RequiresPermissions注解不生效的解决办法

shiro中@RequiresPermissions注解不生效的解决办法 项目采用springboot和shiro,需要对用户的访问权限进行控制,就在controller层的方法上加上@RequiresPermissions(“AUTH_USER”)注解,发现并没有生效。查阅一些资料后才明白,原来是没有开启shiro的注解支持,需要在ShiroConfiguration 配置类中,加上开启注解的代...

半城山半城水 6413

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

shiro注解不生效(表象)

连续被折磨三天,shiro的@RequiresPermissions注解就是感觉不到生效,找各种博文、帖子也解决不了,最后逼着对shiro断点观察,终于找到问题根源... 在网上找资料,一般注解不生效,主要有两个原因: 1、没有启用shiro注解功能。而启用该功能主要有如下两种方式: ①、使用

a77Nian的专栏 6710

权限框架之Shiro详解

文章大纲 一、权限框架介绍 二、Shiro基础介绍 三、Spring Boot整合Shiro代码实战 四、项目源码与资料下载 五、参考文章 一、权限框架介绍 1. 什么是权限管理   权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。   权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 1.1 用户身份认证   身份.

Dream_ling的博客 6431

Shiro 权限管理

一共5个表 用户表 角色表 权限表 用户角色中间表 角色权限中间表 权限验证 通过角色来判断有没有权限。 比如 if 用户有在用户角色中间表中有经理的角色, 就可以查看工资。这中判断比较笼统。适合比如实现不同的角色登录以后看到不同的菜单。 通过权限标识来判断, 这个就需要查出用户拥有的具体权限。 这个权限控制比较细致。 适合细致的,比如部门公司的管理员,只能修改该部门下的员工资料。 Shi...

心猿意码 5245

解决shiro权限注解不生效问题

shiro configatation配置类如下 //注解生效1 @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { AuthorizationAttributeSourceAdvisor authoriz...

weixin_44098551的博客 1498

Shiro权限认证

一、权限认证核心要素 权限认证顾名思义,就是在应用系统中,控制谁能访问哪些资源。核心要素有仨:权限、角色、用户   权限:即操作资源的权利,如访问某个url,对某个模块数据进行增删改查   角色:权限的集合,一种角色可以包含多种权限。例如操作员角色可查看系统账单、进行结账操作多种权限。   用户:也就是身份认证中提到的subject一角。  二、授权 shiro授权的方式通常有三种

Think In JAVA—Max 6568

Shiro框架01之什么是shiro+shiro的架构+权限认证

1. 什么是shiroshiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统,分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。2. 在应用程序角度来观察如何使用Shiro完成工作。

全栈 1万+

Shiro @RequiresPermissions不生效原因

Shiro @RequiresPermissions不生效原因和解决方案

张小凡 2786
上一篇: 【sail】第三篇MybatisPlus的配置以及FreeMarker的配置
下一篇: bootstrap-Table sub父子表的使用
bubble21
博客等级 码龄9年 33粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值