千家信息网

Spring与Shiro整合及加载权限表达式问题是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Spring与Shiro整合及加载权限表达式问题是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如何加载权限表达式我
千家信息网最后更新 2026年11月01日Spring与Shiro整合及加载权限表达式问题是什么

Spring与Shiro整合及加载权限表达式问题是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

如何加载权限表达式

我们在上章内容中画了一张图,里面有三个分项,用户 角色 权限;

那么接下来我们就要思考一个问题了,这三张表中的数据要从何而来呢?

用户表

首先先看用户表,用户表的数据库是从用户注册而来;

角色

角色的话肯定是我们手动去创建出来,但是我们在创建角色之前呢?是不是需要先有权限后才能去创建角色呢?因为角色是依赖于权限,只要先有了权限,我们就可以讲它们归类,分配给我们某一个角色;

所以我们的突破口就是,权限该如何去加载这个问题;

我们可以打开我们的Cotroller在接口上可以看到凡是带有Shiro注解的,都是需要有相对应的权限才可以访问的:

重新加载权限

那,问题就来了,我们如何将注解中的权限表达式(employee:edit)存入到数据库中呢?

我们在之前的操作中,是手动的将表达式复制粘贴到数据库中,也就是手动添加进去的,那你想一下,如果需要添加非常多的权限,我们还依然用手动的方式,显然非常麻烦!

那我们能不能想一种办法,就是让用户一点击或进入这个接口执行一个方法马上让它把所有Cotroller中的权限表达式给全部拿出来存入到数据库中;

能不能做到呢?

答案是可以的!

我们在页面上有一个功能是重新加载权限,这个意思就是我们点击后,你加下来的编码,给某给接口添加某项权限的时候,就会帮你把所有Cotrolle中的新添加的权限重新的保存到数据库中;

这个按钮就是一个Url,点击后就进入到了我们在Cotroller编写的接口方法中:

接下来,我们就来看下这个reload接口是如何编写的:

中间的部分就是获取权限表达式,画箭头的是调用了接j口执行的Sql保存操作也就是insert;

此次的接口是对象保存的方式,接口的具体编写也非常简单,其实就跟用户注册一样,将name(权限名称)resource(表达式)作为插入字段即可;

然后在方面结尾调用接口,需要传入一个对象,这个对象(Permisssion p )就是我们存进去的权限名称以及表达式对象;

具体Sql语句编写方式:

insert into permission (name,resource) values("permissionName","PermissionResource");

编写自定义注解来获取权限昵称

我们在reload接口中,拿到的仅仅都是表达式,和获取Requesmapping,但是我们在数据库中有一列是权限名称,因为光靠表达式并非知道它的中文意思,所以我们需要自定义注解,从而获取注解内部的中文诠释;

我们可以看到,这个注解是会报错的,因为这个注解并不是spring或java内置的,更不是第三方依赖的jar包,而是需要我们自定义,所以,自定义注解名字可以随便起,但是一定要有意义;

我们来看看自定义注解是如何创建的;

1.编写好自己的注解

就按照上图的例子我起的名字是@PermissionName;

2.创建一个注解在realm路径下(根据公司项目的结构定义)

注意,Kind:一定选择Annotation(自定义注解);Name可以随便起,但是一定要有意义,我这里直接叫PermissionName就好了;

我这里就把注解创建在realm目录下,因为毕竟这个也是Shiro的一部分,也可以将它放入到工具包下也可以,根据公司的项目结构来,如果这是一个新加入的功能,推荐放入realm包下,并在内打上注解介绍;

3.编写自定义注解类

该注解仅仅获取权限名称使用,以上结构写死即可;

解决重复插入问题(去重)

编写完成后,我们开始进入测试,我们来看看是否可以执行成功,将权限名称以及表达式保存进数据库中:

执行成功,以及加载了全部的权限列表,并且都保存至数据库中;

但是问题来了,如果我们再次点击加载权限列表会怎么样?

我们发现,重复添加了,这种情况在实际开发当中是绝对不允许的,如何解决呢?

去重操作

我们需要在PermissionController类中第0步,再添加一个功能,就是去重;

这个时候,我们需要去调用接口去数据库中查询一下,看看是否有重复,如果重复,我们就跳过,如果没重复,我们就保存进来;

1.我们编写获取所有员工权限的接口

/**获取所有权限表达式*/ListgetAllResources();

2.编写Sql

select resource From permission;

permission就是表,resource是其中的列(权限表达式);我们仅需获取这一个列即可

3.编写实现类

实现类就非常简单,掉Mapper层,执行sql,用集合接收,数据接收到后,直接retrun过去即可;

4.在Controller类中调用

画箭头就是新加入的内容,根据以上指引编写即可;

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

权限 注解 表达式 接口 数据 就是 数据库 用户 角色 问题 名称 对象 手动 内容 功能 方式 结构 用户表 成功 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 科技与互联网 圆梦互联网科技 喔噻互联网科技 宜安科技 互联网金融 长亮科技 互联网金融 四川狮子座互联网科技 须眉科技是互联网公司吗 恒银科技与互联网金融 广西互联网科技孵化中心 亳州好赞互联网科技有限公司 四川慕妮娅互联网科技有限公司 互联网金融科技名词解释 江苏苏星互联网科技有限公司 从那以后互联网科技有限公司 吉林省码上互联网科技电话 互联网科技平台产品运营 互联网科技对化妆品行业 现代科技的标志之一的互联网 株洲百竞科技的互联网营销顾问 南京欣网互联网络科技有限公司 科技互联网企业 深圳恒合互联网络科技有限公司 嘟嘟瓜互联网科技 唐信互联网科技 互联网科技大会 福州新华互联网科技学校 知乎 互联网金融科技公司干啥的 陕西彩京云互联网科技有限公司 互联网领先科技成果宣传视频
0