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。其實外國人也很苦惱,當他們遇到問題的時候,想來中國找找解決方案,好不容易翻譯成英文了,結果一看,咦,這不是我寫的嗎?

固然也不是說這樣就必定很差,至少起到了只是傳播的做用,而我所鄙夷的是那些不假思索,胡抄胡轉的標題黨,然而事實倒是這樣的人太多了。不論是本身記錄,仍是發給別人看,既然發佈到網上,就要有起碼的責任心。遇事多思考,網絡信息量原本就龐大,恰恰還有那麼多標題黨,一看標題猛如虎,一讀原二百五,簡直添堵。

相關文章
相關標籤/搜索