springboot + shiro + thymeleaf 实现按钮级权限控制 踩坑合集

最近一个后台管理系统需要实现权限控制,采用了springboot(项目框架) + shiro(权限框架)进行框架整合。

Shiro作为Apache下的一款轻量权限框架,和Springboot的整合还是比较容易的,进行页面级的权限控制也是水到渠成的事情,不细讲。本篇文章主要讲讲 Springboot+shiro再整合thymeleaf进行页面按钮级控制。

1、maven 依赖引入:

<!-- 只展示shiro相关依赖 -->
// 1
<properties>
    <thymeleaf.version>3.0.3.RELEASE</thymeleaf.version>
    <thymeleaf-layout-dialect.version>2.2.0</thymeleaf-layout-dialect.version>
</properties>

// 2
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.14.RELEASE</version>
</parent>

// 3
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

// 4
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.3.2</version>
</dependency>

// 5 必须加上
<dependency>
    <groupId>com.github.theborakompanioni</groupId>
    <artifactId>thymeleaf-extras-shiro</artifactId>
    <version>2.0.0</version>
</dependency>

以上是正确的依赖引入。

注意点 1,因为一些历史遗留问题吧,我这引入的Springboot版本是1.5.14.RELEASE。其实单独拿出来也没啥问题,但如果和shiro + thymeleaf整合就可能有版本问题。

我们都知道Springboot 2.0以下的springboot版本默认整合的thymeleaf版本是 2.x版本的,也就是上面 pom.xml 里面 数字3 的位置处,spring-boot-starter-thymeleaf 的 version 虽然没写(写了好像也会报错),但其实是2.x。

大家可能会对 数字1 处 properties 标签里的两行代码有疑问,因为它们看上去没被用到啊。可以先将它们去掉,于是。。。就报错了:

org.thymeleaf.dialect.AbstractProcessorDialect 没找到,这是因为 thymeleaf 2.x 版本不存在 这个类。所以,需要加上 数字 1 处的两个设置:

(1)把 thymeleaf 设置为 3.x 版本

(2)把 页面上需要用到的用来控制权限的 shiro标签(类似于JSTL的c标签) 设置为 2.x 版本,如果没有这一句也会报错:

注意点 2,引入的 thymeleaf-extras-shiro 依赖 需要是 2.x 版本的,否则,就像我刚开始写的 1.2.2 版本一样,会报错:

 

OK,经过上面BUG的洗礼之后,项目成功启动啦!该干点正事了。

首先,如果需要在页面上使用 shiro 的标签 进行权限控制,需要在 shiro 的配置类里注入 ShiroDialect 类(重要),这个类是thymeleaf-extras-shiro.jar 里面的:

@Configuration
public class ShiroConfig {

    ...

    @Bean(name = "shiroDialect")
    public ShiroDialect shiroDialect(){
        return new ShiroDialect();
    }

}

然后,在需要使用 shiro 标签的页面上引入 shiro标签,如下:

<html xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">

不知道为啥,我没引这个好像也不报错。Anyway,还是加上比较保险。

最后,就可以在你页面需要进行权限控制的 html标签上 加上 shiro标签啦,如下:

<a href="javascript" shiro:user="" >欢迎 <shiro:principal /></li>
<a href="javascript" shiro:hasPermission="admin:delete" >删除</a>
<button href="javascript:;" shiro:hasRole="admin">编辑</button>

上面的例子只用了部分标签,其实还有很多:

<shiro:principal /> // 当前用户的登录信息,用户名之类

shiro:guest="" // 验证是否是游客,即未认证的用户

shiro:user="" // 验证是否是已认证或已记住用户

shiro:authenticated="" // 验证是否是已认证用户,不包括已记住用户

shiro:notAuthenticated= "" // 未认证用户,但是 已记住用户

shiro:lacksRole="admin" // 表示没有 admin 角色的用户

shiro:hasAllRoles="admin, user1" // 表示需要同时拥有两种角色

shiro:hasAnyRoles="admin, user1" // 表示 拥有其中一个角色即可

shiro:lacksPermission="admin:delete" // 类似于 shiro:lacksRole

shiro:hasAllPermissions="admin:delete, admin:edit"  // 类似于 shiro:hasAllRoles

shiro:hasAnyPermission="admin:delete, admin:edit" // 类似于 hasAnyRoles

 

 

THE END!

以上为个人学习总结,如有问题文明吐槽。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值