Thymeleaf的sec:authorize标签无效的解决方案

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>

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

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

    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
springsccurity5spring

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

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

l2NHtx.png

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

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


吐槽

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

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

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

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

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

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

相关文章
相关标签/搜索