SpringBoot--- SpringSecurity進行注銷權(quán)限控制的配置方法
環(huán)境
IDEA :2020.1
Maven:3.5.6
SpringBoot: 2.0.9 (與此前整合的版本2.3.3 不同,版本適配問題,為配合使用降級)
1、注銷
這里也有一個前提問題需要注意,我們登錄操作都是在開啟防跨域攻擊的環(huán)境下進行的。
毫無疑問,注銷也是在這樣的情況下進行的。
登錄時我們提交表單,采用 POST 方法傳輸,通過使用 Thymeleaf 在 form 表單添加 th:action 元素,Thymeleaf 會自動為我們添加 _csrf 元素。
同樣注銷操作也是要帶有 _csrf 參數(shù)認證的。
<form th:action="@{/logout}" method="post"> <button type="submit" >注銷</button> </form>
我們把它做成一個表單按鈕,同時采用 POST 方法傳輸,使用 SpringSecurity 提供的默認 /logout 方法進行登出注銷。
開發(fā)者是不需要在 Controller 配置這個 /logout 方法處理的,和 /login 一樣,這是由 SpringSecurity 提供的。
我們需要在之前登陸的配置類配置登出的各種屬性即可。
.and() //這里采用鏈?zhǔn)骄幊? .logout() .logoutSuccessUrl("/index") //注銷成功后,調(diào)轉(zhuǎn)的頁面 /* .logoutUrl() 配置自己的注銷URL,默認為 /logout .invalidateHttpSession() 是否銷毀session,默認ture .deleteCookies() 刪除指定的cookies
銷毀session 相信很容易理解,一次對話,可以注銷關(guān)閉,或者關(guān)閉頁面會自動銷毀。
記住我
cookies 需要重點介紹一下,這也是我們常用的記住我,在關(guān)閉頁面或瀏覽器之后,下次打開頁面時,是以之前登錄的用戶登錄的。
為此,我們需要在登錄表單增加記住我選項
tr> <td> <input type="checkbox" name="remember-me"> </td> <td>Remember me on this computer. </td> </tr>
同時在配置類開啟記住我。
.and() .rememberMe();
這里 checkbox 的 name 我們使用默認的 remember-me ,同樣這一 cookies 的 name 也會被瀏覽器記住,這樣我們只需要開啟記住我即可使用。
如果不使用 name= "remember-me" ,而是使用其他 name 屬性值,則需要配置指定,以便 SpringSecurity 接收是否記住我。
.and() .rememberMe().rememberMeParameter("rememberme"); //接收前端自定義記住我的name<input name="rememberme">,默認是remember-me
回到 deleteCookies() 方法的配置上,要銷毀指定的 cookies ,我們要指定cookies 的名字即可。
.and() .logout().logoutSuccessUrl("/index").deleteCookies("remember-me") //銷毀 name="remember-me"的 cookies
瀏覽器登錄,選用記住我
登錄后, F12,查看 cookies
第一個為 cookies,第二個則是此次會話的 session 對象。
可以看到 cookies 是有限期的,默認為 14 天。
點擊注銷。
由于配置了刪除 cookies,cookies 已經(jīng)被刪除。
重新登錄,這次沒有選記住我,同時 session 也已經(jīng)不是同一個,值已經(jīng)改變了。
2、權(quán)限控制
同時,頁面還有一個重要的需求沒有實現(xiàn)。
沒有某一權(quán)限的用戶,不應(yīng)該看到點擊的入口(武功秘籍)。所謂得不到的最想要,你這不是擺著饞他嘛!可不能把他害咯。
對此,我們可以結(jié)合 Thymeleaf 和 SpringSecurity 實現(xiàn)哪些用戶可以看到哪些內(nèi)容。
首先,我們要導(dǎo)入 thymeleaf-springsecurity 整合的依賴
<!-- thymeleaf-springsecurity整合--> <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity4</artifactId> <version>3.0.4.RELEASE</version> </dependency>
同時還要在頁面標(biāo)簽導(dǎo)入命名空間
<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
在頁面下把需要權(quán)限限制的內(nèi)容包起來
<div sec:authorize="!isAuthenticated()"> <h2 align="center" >游客您好,如果想查看武林秘籍 <a th:href="@{/toLogin}">請登錄</a> </h2> </div>
sec:authorize="!isAuthenticated()" 表示未登錄認證的用戶才可以查看到的內(nèi)容。
<div sec:authorize="isAuthenticated()"> <a> Count: <span sec:authentication="name"></span> </a> <form th:action="@{/logout}" method="post"><!--只能通過表單加 -csrf 認證,其他(超鏈接)無法添加--> <button type="submit" >注銷</button> </form> </div>
sec:authorize="isAuthenticated()" 表示已經(jīng)登錄認證的用戶才可以查看到的內(nèi)容。
sec:authentication="name" 表示獲取認證的用戶的用戶名。
唉,別忘了,重點,有些武功秘籍不能讓沒有權(quán)限的用戶看到,比如 level2 的,像什么太極拳,七傷拳,梯云縱。哈哈哈
<div sec:authorize="hasRole('level2')"> <h3>高級武功秘籍</h3> <ul> <li><a th:href="@{/level2/1}">太極拳</a></li> <li><a th:href="@{/level2/2}">七傷拳</a></li> <li><a th:href="@{/level2/3}">梯云縱</a></li> </ul></div>
sec:authorize="hasRole('level2')" 規(guī)定只有 level 2 權(quán)限的用戶才能查看。
其他的可以此類推做出配置。
除此之外,還可以有其他定制化配置,權(quán)限(role),權(quán)力(authority),IP ,是否允許(permission)。
spring security 5.1.6版本,從源碼的角度可以看出使用不同的hasAuthority、hasRole方法判斷權(quán)限時的區(qū)別,其實他們最終調(diào)用的都是hasAnyAuthorityName()方法,唯一不同的就是hasRole()在調(diào)用時,傳遞了前綴defaultRolePrefix,這就導(dǎo)致了他們兩者之間比較的字符產(chǎn)生了差異。spring security應(yīng)該想代表的意思就是權(quán)限字符加了ROLE_就是角色Role,如果沒有加就是一個權(quán)限Authority。
SpringSecurity 都有為我們提供。
到此這篇關(guān)于SpringBoot--- SpringSecurity進行注銷,權(quán)限控制的文章就介紹到這了,更多相關(guān)SpringSecurity注銷 權(quán)限控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 詳解springboot?springsecuroty中的注銷和權(quán)限控制問題
- SpringBoot使用Spring Security實現(xiàn)登錄注銷功能
- Vue+springboot批量刪除功能實現(xiàn)代碼
- springboot和vue前后端交互的實現(xiàn)示例
- SpringBoot3結(jié)合Vue3實現(xiàn)用戶登錄功能
- 基于SpringBoot和Vue3的博客平臺的用戶注冊與登錄功能實現(xiàn)
- SpringBoot和Vue.js實現(xiàn)的前后端分離的用戶權(quán)限管理系統(tǒng)
- 詳解SpringBoot項目整合Vue做一個完整的用戶注冊功能
- Vue結(jié)合Springboot實現(xiàn)用戶列表單頁面(前后端分離)
- vue+springboot用戶注銷功能實現(xiàn)代碼
相關(guān)文章
IDEA 中創(chuàng)建并部署 JavaWeb 程序的方法步驟(圖文)
本文主要介紹了IDEA 中創(chuàng)建并部署 JavaWeb 程序的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Springboot RestTemplate 簡單使用解析
這篇文章主要介紹了Springboot RestTemplate 簡單使用解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Java實現(xiàn)快速排序算法(Quicktsort)
這篇文章主要介紹了Java實現(xiàn)快速排序算法(Quicktsort),有需要的朋友可以參考一下2013-12-12jvm內(nèi)存溢出解決方法(jvm內(nèi)存溢出怎么解決)
jvm內(nèi)存溢出解決方法,詳細內(nèi)容看下面解釋2013-12-12寧可用Lombok也不把成員設(shè)置為public原理解析
這篇文章主要為大家介紹了寧可用Lombok也不把成員設(shè)置為public原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03Java中json與javaBean幾種互轉(zhuǎn)的講解
今天小編就為大家分享一篇關(guān)于Java中json與javaBean幾種互轉(zhuǎn)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03