Thymeleaf的sec:authorize
标签能够在前端作权限控制,根据用户角色显示不一样的内容。用法十分简单,和th:if
相似。html
<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
命名空间git
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4"> <body> </body>
在项目中添加thymeleaf-extras-springsecurity
依赖github
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
spring
这三个版本中又分别有2.x
和3.x
版本对应Thymeleaf
的2.x
和3.x
版本,任意一个版本对不上,sec:authorize
标签都不会生效。网络
关于版本号的问题,在thymeleaf-extras-springsecurity
项目的GitHub上给出了明确的说明。spring-boot
在html中引入命名空间的时候,也须要指定一个版本的thymeleaf-extras-springsecurity
,最好是和项目依赖中的相同。spa
若是你在接手一个老项目,又发现sec:authorize
无效,查看一下你的SpringSecurity
和Thymeleaf
的版本号,是否和thymeleaf-extras-springsecurity
的版本号匹配。翻译
sec:authorize
标签不生效并非一个技术性问题,可是能把你坑的体无完肤,更坑的是网上一大堆傻逼教程,这才是我要吐槽的。code
百度搜sec:authorize不生效
关键字,一大堆标题贼漂亮的博客,可是没有哪一篇说到了问题的关键。这些博客都在说spring-boot
版本号高了或是低了,降到2.0.7
就行了,还有说把thymeleaf-extras-springsecurity4
改为thymeleaf-extras-springsecurity5
就行了,也有告诉你要引入哪些依赖的,反正是五花八门。
说改版本号和加依赖的,不是说他们错了,只是这些教程抄来抄去,没有一我的说清楚为何。都是根据本身的状况,发现改一下版本号就行了,因而就发到网上,本身都不知道为何这么改就能成功。还有一堆转载,外链的,特别是某SDN上,看的让人想骂街。
sec:authorize
没效果,都知道是版本的问题,但是没有一我的告诉你该怎么该版本号。GitHub上已经说的很清楚了,但是没人愿意看,他们更愿意看着乱七八糟的博客瞎转载,本身写的也从不写为何。
咱们如今都在干什么?出现问题都不本身思考,国内找不到解决办法了就去谷歌,找国外的资料。外国人说这样作能够解决,而后就翻译过来变成本身的博客,有些人甚至翻译都省了,直接copy。其实外国人也很苦恼,当他们遇到问题的时候,想来中国找找解决方案,好不容易翻译成英文了,结果一看,咦,这不是我写的吗?
固然也不是说这样就必定很差,至少起到了只是传播的做用,而我所鄙夷的是那些不假思索,胡抄胡转的标题党,然而事实倒是这样的人太多了。不论是本身记录,仍是发给别人看,既然发布到网上,就要有起码的责任心。遇事多思考,网络信息量原本就庞大,恰恰还有那么多标题党,一看标题猛如虎,一读原二百五,简直添堵。