3

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>

使用它必须使用SpringSecurityThymeleaf模板引擎,虽然这个标签不是Thymeleaf官方出品,但也得到了官方的支持。此外还有两件非常重要的事情需要做:

  1. 在在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>
  2. 在项目中添加thymeleaf-extras-springsecurity依赖

    compile "org.thymeleaf.extras:thymeleaf-extras-springsecurity4:2.1.3.RELEASE"

然而有很大概率是你做完上面两件事情之后,sec:authorize并没有生效。我可以很负责任的说,使用这个标签,上面两件事情就是你唯一需要额外做的。其实问题出在thymeleaf-extras-springsecurity的版本号上,他要依赖SpringSecurityThymeleaf,因此它的版本号必须和这两个库匹配,thymeleaf-extras-springsecurity本身就有以下三个版本
thymeleaf-extras-springsecurity3
thymeleaf-extras-springsecurity4
thymeleaf-extras-springsecurity5
分别对应SpringSecurity的三个版本
springsccurity3
springsccurity4
springsccurity5

这三个版本中又分别有2.x3.x版本对应Thymeleaf2.x3.x版本,任意一个版本对不上,sec:authorize标签都不会生效。

关于版本号的问题,在thymeleaf-extras-springsecurity项目的GitHub上给出了明确的说明。

l2NHtx.png

在html中引入命名空间的时候,也需要指定一个版本的thymeleaf-extras-springsecurity,最好是和项目依赖中的相同。

如果你在接手一个老项目,又发现sec:authorize无效,查看一下你的SpringSecurityThymeleaf的版本号,是否和thymeleaf-extras-springsecurity的版本号匹配。


吐槽

sec:authorize标签不生效并不是一个技术性问题,但是能把你坑的体无完肤,更坑的是网上一大堆傻逼教程,这才是我要吐槽的。

百度搜sec:authorize不生效关键字,一大堆标题贼漂亮的博客,但是没有哪一篇说到了问题的关键。这些博客都在说spring-boot版本号高了或是低了,降到2.0.7就好了,还有说把thymeleaf-extras-springsecurity4改成thymeleaf-extras-springsecurity5就好了,也有告诉你要引入哪些依赖的,反正是五花八门。

说改版本号和加依赖的,不是说他们错了,只是这些教程抄来抄去,没有一个人说清楚为什么。都是根据自己的情况,发现改一下版本号就好了,于是就发到网上,自己都不知道为什么这么改就能成功。还有一堆转载,外链的,特别是某SDN上,看的让人想骂街。

sec:authorize没效果,都知道是版本的问题,可是没有一个人告诉你该怎么该版本号。GitHub上已经说的很清楚了,可是没人愿意看,他们更愿意看着乱七八糟的博客瞎转载,自己写的也从不写为什么。

我们现在都在干什么?出现问题都不自己思考,国内找不到解决办法了就去谷歌,找国外的资料。外国人说这样做可以解决,然后就翻译过来变成自己的博客,有些人甚至翻译都省了,直接copy。其实外国人也很苦恼,当他们遇到问题的时候,想来中国找找解决方案,好不容易翻译成英文了,结果一看,咦,这不是我写的吗?

当然也不是说这样就一定不好,至少起到了只是传播的作用,而我所鄙夷的是那些不假思索,胡抄胡转的标题党,然而事实却是这样的人太多了。不管是自己记录,还是发给别人看,既然发布到网上,就要有起码的责任心。遇事多思考,网络信息量本来就庞大,偏偏还有那么多标题党,一看标题猛如虎,一读原二百五,简直添堵。


Husky
7 声望0 粉丝