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。其實外國人也很苦惱,當他們遇到問題的時候,想來中國找找解決方案,好不容易翻譯成英文了,結果一看,咦,這不是我寫的嗎?
固然也不是說這樣就必定很差,至少起到了只是傳播的做用,而我所鄙夷的是那些不假思索,胡抄胡轉的標題黨,然而事實倒是這樣的人太多了。不論是本身記錄,仍是發給別人看,既然發佈到網上,就要有起碼的責任心。遇事多思考,網絡信息量原本就龐大,恰恰還有那麼多標題黨,一看標題猛如虎,一讀原二百五,簡直添堵。