Thymeleaf的sec:authorize
标签可以在前端做权限控制,根据用户角色显示不同的内容。用法十分简单,和th:if
类似。
<div sec:authorize="isAuthenticated()">
<p>已登录</p>
</div>
<div sec:authorize="hasRole('ROLE_ADMIN')">
<p>管理员</p>
</div>
<div sec:authorize="hasRole('ROLE_USER')">
<p>普通用户</p>
</div>
使用它必须使用SpringSecurity
和Thymeleaf
模板引擎,虽然这个标签不是Thymeleaf
官方出品,但也得到了官方的支持。此外还有两件非常重要的事情需要做:
-
在在html中引入
http://www.thymeleaf.org/thymeleaf-extras-springsecurity4
命名空间<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> <body> </body>
-
在项目中添加
thymeleaf-extras-springsecurity
依赖compile "org.thymeleaf.extras:thymeleaf-extras-springsecurity4:2.1.3.RELEASE"
然而有很大概率是你做完上面两件事情之后,sec:authorize
并没有生效。我可以很负责任的说,使用这个标签,上面两件事情就是你唯一需要额外做的。其实问题出在thymeleaf-extras-springsecurity
的版本号上,他要依赖SpringSecurity
和Thymeleaf
,因此它的版本号必须和这两个库匹配,thymeleaf-extras-springsecurity
本身就有以下三个版本thymeleaf-extras-springsecurity3
thymeleaf-extras-springsecurity4
thymeleaf-extras-springsecurity5
分别对应SpringSecurity
的三个版本springsccurity3
springsccurity4
springsccurity5
这三个版本中又分别有2.x
和3.x
版本对应Thymeleaf
的2.x
和3.x
版本,任意一个版本对不上,sec:authorize
标签都不会生效。
关于版本号的问题,在thymeleaf-extras-springsecurity
项目的GitHub上给出了明确的说明。
在html中引入命名空间的时候,也需要指定一个版本的thymeleaf-extras-springsecurity
,最好是和项目依赖中的相同。
如果你在接手一个老项目,又发现sec:authorize
无效,查看一下你的SpringSecurity
和Thymeleaf
的版本号,是否和thymeleaf-extras-springsecurity
的版本号匹配。
吐槽
sec:authorize
标签不生效并不是一个技术性问题,但是能把你坑的体无完肤,更坑的是网上一大堆傻逼教程,这才是我要吐槽的。
百度搜sec:authorize不生效
关键字,一大堆标题贼漂亮的博客,但是没有哪一篇说到了问题的关键。这些博客都在说spring-boot
版本号高了或是低了,降到2.0.7
就好了,还有说把thymeleaf-extras-springsecurity4
改成thymeleaf-extras-springsecurity5
就好了,也有告诉你要引入哪些依赖的,反正是五花八门。
说改版本号和加依赖的,不是说他们错了,只是这些教程抄来抄去,没有一个人说清楚为什么。都是根据自己的情况,发现改一下版本号就好了,于是就发到网上,自己都不知道为什么这么改就能成功。还有一堆转载,外链的,特别是某SDN上,看的让人想骂街。
sec:authorize
没效果,都知道是版本的问题,可是没有一个人告诉你该怎么该版本号。GitHub上已经说的很清楚了,可是没人愿意看,他们更愿意看着乱七八糟的博客瞎转载,自己写的也从不写为什么。
我们现在都在干什么?出现问题都不自己思考,国内找不到解决办法了就去谷歌,找国外的资料。外国人说这样做可以解决,然后就翻译过来变成自己的博客,有些人甚至翻译都省了,直接copy。其实外国人也很苦恼,当他们遇到问题的时候,想来中国找找解决方案,好不容易翻译成英文了,结果一看,咦,这不是我写的吗?
当然也不是说这样就一定不好,至少起到了只是传播的作用,而我所鄙夷的是那些不假思索,胡抄胡转的标题党,然而事实却是这样的人太多了。不管是自己记录,还是发给别人看,既然发布到网上,就要有起码的责任心。遇事多思考,网络信息量本来就庞大,偏偏还有那么多标题党,一看标题猛如虎,一读原二百五,简直添堵。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。