Shiro快速入门之三

一、前言

接Shiro快速入门之二,上篇侧重于介绍认证,这篇介绍一下Shiro的授权,先初始化5张表的数据。

注:创建三条权限记录,一个admin角色分配查询和添加用户权限,一个账户qingcai18036授予管理员角色。

二、代码

1、MyShiroRealm.java

注:MyShiroRealm增加授权接口,实现授权方法,进入该方法时肯定是通过了认证,先从参数中获取用户对象(这里对应认证接口SimpleAuthenticationInfo设置principal参数值),然后遍历用户对象中所有角色以及所权限,将该用户的所有角色和权限设置到SimpleAuthorizationInfo对象中。

2、ShiroConfig.java

注:增加AuthorizationAttributeSourceAdvisor构建,开启shiro Aop支持,即在Controller的方法中可以用类似注释@RequiresPermissions("user:add")来配置每个接口的访问权限。

3、UserController.java

注:在需要授权的接口加上RequiresPermissions("权限key")来设置,这里我用qingcai18036登录后(初始化数据中qingcai18036账号配置了角色admin,admin角色配置了权限user:view和user:add),然后访问http://localhost:8080/userAdd、或http://localhost:8080/userList?name=qingcai18036可以正访问,而访问http://localhost:8080/userDel后台会抛出org.apache.shiro.authz.AuthorizationException运行时异常。但返回数据显示的是500错误,你可以配置跳转到403页面,在ShiroConfig.java加上如下下配置

三、权限注解

shiro权限有5个注解,如果一个类或方法上有多个注解,按下列次序进行处理,如果通过的会继续检查后面,否则返回。

  • RequiresRoles:可作用于Controller或方法上,多个角色是And关系,必须同时具备。

  • RequiresPermissions:与RequiresRoles类似,用得比较多。

  • RequiresAuthentication:当前Subject必须在当前session中已经过认证。

  • RequiresUser:当前Subject必须是应用的用户,才能访问或调用被该注解标注的类

  • RequiresGuest:不需要经过认证或者在原先的session中存在记录。

四、权限注解源代码剖析

ShiroConfig.配置AuthorizationAttributeSourceAdvisor会调用

AopAllianceAnnotationsAuthorizingMethodInterceptor注册拦截器

然后调用具体方法,如果注解上有@RequiresPermissions("user:add"),会调用PermissionAnnotationHandler类的通过suject对象检测是否有注解上的值

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

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

相关文章

python数据结构与算法-04_队列

队列和栈 前面讲了线性和链式结构,如果你顺利掌握了,下边的队列和栈就小菜一碟了。因为我们会用前两章讲到的东西来实现队列和栈。 之所以放到一起讲是因为这两个东西很类似,队列是先进先出结构(FIFO, first in first out), 栈是…

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器,先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式: 然后在android studio中刷新设备列表,就能看到新设备了: 如何确定这个设备就是你的mumu模拟器呢…

2012年11月10日 Go生态洞察:Go语言三周年回顾

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

预览PDF并显示当前页数

这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…

电子零部件工厂的WMS系统:业务特点、产品特点与优势

一、电子零部件工厂的业务特点 电子零部件工厂的业务涉及各种电子元器件的生产、组装和配送。其业务特点包括&#xff1a; 高度复杂性&#xff1a;电子零部件工厂的生产流程涉及多种原材料、半成品和成品&#xff0c;每种产品都有不同的规格、属性及存储要求。 严格的质量控…

基于Rabbitmq和Redis的延迟消息实现

1 基于Rabbitmq延迟消息实现 支付时间设置为30&#xff0c;未支付的消息会积压在mq中&#xff0c;给mq带来巨大压力。我们可以利用Rabbitmq的延迟队列插件实现消息前一分钟尽快处理 1.1定义延迟消息实体 由于我们要多次发送延迟消息&#xff0c;因此需要先定义一个记录消息…

Jenkins 构建CICD

GitLab GitLab安装 https://gitlab.cn/install/?versionce CentOS 下安装 1. 安装和配置必须的依赖项 在 CentOS 7上&#xff0c;下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤&#xff0c;如果您打算仅从本地网络访问极狐GitLab&#xf…

【极客时间-系列教程】Vim 实用技巧必知必会-基本概念和基础命令:应对简单的编辑任务

vim很强大&#xff0c;但它的入门确实是比较高&#xff0c;对于初学者来说&#xff0c;怎么退出都是一件很难的事情&#xff0c; 不管你有没有遇到过&#xff0c;反正我是遇到过退出比较难的问题 首先介绍几个常用的命令和按键 :q! 退出不保存:w 写入不退出:r 读文件:wq 写入…

Android面试官の小抄,可能是东半球最好的

面试官的小抄&#xff0c;Android面试&进阶一网打尽&#xff0c;让一部分人先学起来 背景 作为一名客户端开发者&#xff0c;能够明显的感觉到小程序这些年对原生市场带来的压迫感&#xff0c;比如现在的创业公司都是小程序探路&#xff0c;成熟了再推进客户端&#xff0…

用递归解饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料&#xff0c;凭3个瓶盖可以再换一瓶C型饮料&#xff0c;并且可以一直循环下去&#xff0c;但不允许赊账。 请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动&#xff0c;那么&#xff0c;对于他初始…

小程序与公众号下发统一消息接口返回45109

根据微信官方通告&#xff0c;自 2023 年 9 月 20 日起&#xff0c;下发统一消息接口将被收回&#xff0c;返回45109。链接见 小程序与公众号下发统一消息接口调整通知 | 微信开放社区各位开发者&#xff1a;下发统一消息 接口曾支持小程序与公众号统一的模板消息下发。由于小程…

揭密,这个微信群机器人的所有秘密在这里

技术长久不用就废了&#xff0c;我想把软件开发技术重新捡拾起来。 咱们“一起学英语”群已有三年时光&#xff0c;群里很多朋友互帮互助走到了今天。可是&#xff0c;即使再好玩的英语话题&#xff0c;也有谈腻的时候。 群里是不是应该引入一点好玩的东西&#xff1f; 人工智能…

51单片机+DS1302设计一个电子钟(LCD1602显示时间)

一、前言 电子钟是一种能够准确显示时间的设备&#xff0c;广泛应用于家庭、办公场所和公共场所&#xff0c;为人们提供了方便和准确的时间信息。本项目设计一个基于51单片机的电子钟&#xff0c;使用DS1302作为RTC时钟芯片&#xff0c;LCD1602作为显示屏&#xff0c;并通过串…

亚马逊、Shein、lazada自养号测评如何解决支付和环境问题?

年底旺季&#xff0c;平台风控都会大规模持续升级&#xff0c;针对风控升级如果测评环境没有进行相对应的更新可能会导致大批量砍单&#xff0c;或者F号&#xff0c;严重的店铺还会被关联。有人以为是支付卡的问题&#xff0c;也有人觉得是IP被关联了。其实他们讲的也没错&…

【万字长文】前端性能优化实践 | 京东云技术团队

一、引言 从一个假死页面引发的思考&#xff1a; 作为前端开发&#xff0c;除了要攻克页面难点&#xff0c;也要有更深的自我目标&#xff0c;性能优化是自我提升中很重要的一环&#xff1b; 在前端开发中&#xff0c;会偶遇到页面假死的现象&#xff0c; 是因为当js有大量计算…

mysql 中with的用法(2)

with递归练习主要用于表里面包含父节点id之类的 查询出对应的省份和市。 建表 CREATE TABLE tb(id VARCHAR(3), pid VARCHAR(3), name VARCHAR(64));INSERT INTO tb VALUES(002, 0, 浙江省); INSERT INTO tb VALUES(001, 0, 广东省); INSERT INTO tb VALUES(003, 002, 衢州市…

史上最强AI芯片!英伟达H200震撼来袭!141 GB 超大显存,Llama2推理性能翻倍,老黄赢麻了!

原创 作者 | 王二狗英伟达又一次打了所有人措手不及&#xff01; 就在昨晚&#xff0c;老黄发布了新一代史上最强 AI芯片 NVIDIA HGX™ H200 。 141 GB 超大显存&#xff01;带宽增加 2.4 倍 H200 拥有141GB 显存&#xff01;相比之前的 H100和A100&#xff0c;容量几乎翻倍&…

SpringBoot整合Activiti7——定时器事件(九)

文章目录 定时器事件时间定义时间固定时间段时间周期 1.开始事件2.中间事件3.边界事件代码实现xml文件自定义服务任务监听器自定义用户任务监听器测试流程流程执行步骤 定时器事件 可以用在开始事件、中间事件、边界事件上&#xff0c;边界事件可以是中断和非中断边界事件 需要…

css实现元素四周阴影

前言 首先确定的是需要使用box-shadow这一属性 语法如下&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset; h-shadow&#xff1a;表示水平方向上的阴影偏移量&#xff0c;必须指明&#xff0c;可以是正数、负数、0&#xff0c;如果为正数左方有阴影&…