最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot--- SpringSecurity進(jìn)行注銷權(quán)限控制的配置方法

 更新時(shí)間:2020年08月21日 08:41:45   作者:凌丹妙  
這篇文章主要介紹了SpringBoot--- SpringSecurity進(jìn)行注銷,權(quán)限控制,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

環(huán)境

IDEA :2020.1

Maven:3.5.6

SpringBoot: 2.0.9 (與此前整合的版本2.3.3 不同,版本適配問(wèn)題,為配合使用降級(jí))

1、注銷

這里也有一個(gè)前提問(wèn)題需要注意,我們登錄操作都是在開(kāi)啟防跨域攻擊的環(huán)境下進(jìn)行的。

毫無(wú)疑問(wèn),注銷也是在這樣的情況下進(jìn)行的。

登錄時(shí)我們提交表單,采用 POST 方法傳輸,通過(guò)使用 Thymeleaf 在 form 表單添加 th:action 元素,Thymeleaf 會(huì)自動(dòng)為我們添加 _csrf 元素。

同樣注銷操作也是要帶有 _csrf 參數(shù)認(rèn)證的。

<form th:action="@{/logout}" method="post">
			<button type="submit" >注銷</button>
</form>

我們把它做成一個(gè)表單按鈕,同時(shí)采用 POST 方法傳輸,使用 SpringSecurity 提供的默認(rèn) /logout 方法進(jìn)行登出注銷。

開(kāi)發(fā)者是不需要在 Controller 配置這個(gè) /logout 方法處理的,和 /login 一樣,這是由 SpringSecurity 提供的。

我們需要在之前登陸的配置類配置登出的各種屬性即可。

.and()  //這里采用鏈?zhǔn)骄幊?
  .logout()
  	.logoutSuccessUrl("/index") //注銷成功后,調(diào)轉(zhuǎn)的頁(yè)面
 /* 	.logoutUrl()  配置自己的注銷URL,默認(rèn)為 /logout
  	.invalidateHttpSession() 是否銷毀session,默認(rèn)ture
  	.deleteCookies()   刪除指定的cookies  

銷毀session 相信很容易理解,一次對(duì)話,可以注銷關(guān)閉,或者關(guān)閉頁(yè)面會(huì)自動(dòng)銷毀。

記住我

cookies 需要重點(diǎn)介紹一下,這也是我們常用的記住我,在關(guān)閉頁(yè)面或?yàn)g覽器之后,下次打開(kāi)頁(yè)面時(shí),是以之前登錄的用戶登錄的。

為此,我們需要在登錄表單增加記住我選項(xiàng)

tr>
<td>
<input type="checkbox" name="remember-me">
</td>
<td>Remember me on this computer.
</td>
</tr>

同時(shí)在配置類開(kāi)啟記住我。

.and()
  .rememberMe(); 

這里 checkbox 的 name 我們使用默認(rèn)的 remember-me ,同樣這一 cookies 的 name 也會(huì)被瀏覽器記住,這樣我們只需要開(kāi)啟記住我即可使用。

如果不使用 name= "remember-me" ,而是使用其他 name 屬性值,則需要配置指定,以便 SpringSecurity 接收是否記住我。

.and()
  .rememberMe().rememberMeParameter("rememberme"); 
//接收前端自定義記住我的name<input name="rememberme">,默認(rèn)是remember-me

回到 deleteCookies() 方法的配置上,要銷毀指定的 cookies ,我們要指定cookies 的名字即可。

.and()
  .logout().logoutSuccessUrl("/index").deleteCookies("remember-me") 
 //銷毀 name="remember-me"的 cookies

瀏覽器登錄,選用記住我

登錄后, F12,查看 cookies

第一個(gè)為 cookies,第二個(gè)則是此次會(huì)話的 session 對(duì)象。

可以看到 cookies 是有限期的,默認(rèn)為 14 天。

點(diǎn)擊注銷。

由于配置了刪除 cookies,cookies 已經(jīng)被刪除。

重新登錄,這次沒(méi)有選記住我,同時(shí) session 也已經(jīng)不是同一個(gè),值已經(jīng)改變了。

2、權(quán)限控制

同時(shí),頁(yè)面還有一個(gè)重要的需求沒(méi)有實(shí)現(xiàn)。

沒(méi)有某一權(quán)限的用戶,不應(yīng)該看到點(diǎn)擊的入口(武功秘籍)。所謂得不到的最想要,你這不是擺著饞他嘛!可不能把他害咯。

對(duì)此,我們可以結(jié)合 Thymeleaf 和 SpringSecurity 實(shí)現(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>

同時(shí)還要在頁(yè)面標(biāo)簽導(dǎo)入命名空間

<html xmlns:th="http://www.thymeleaf.org"
	 xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity4">

在頁(yè)面下把需要權(quán)限限制的內(nèi)容包起來(lái)

<div sec:authorize="!isAuthenticated()">
	<h2 align="center" >游客您好,如果想查看武林秘籍
		<a th:href="@{/toLogin}">請(qǐng)登錄</a> 
	</h2>
	</div>

sec:authorize="!isAuthenticated()" 表示未登錄認(rèn)證的用戶才可以查看到的內(nèi)容。

<div sec:authorize="isAuthenticated()">
		<a>
			Count: <span sec:authentication="name"></span>
		</a>
		<form th:action="@{/logout}" method="post"><!--只能通過(guò)表單加 -csrf 認(rèn)證,其他(超鏈接)無(wú)法添加-->
			<button type="submit" >注銷</button>
		</form>
	</div>

sec:authorize="isAuthenticated()" 表示已經(jīng)登錄認(rèn)證的用戶才可以查看到的內(nèi)容。

sec:authentication="name" 表示獲取認(rèn)證的用戶的用戶名。

唉,別忘了,重點(diǎn),有些武功秘籍不能讓沒(méi)有權(quán)限的用戶看到,比如 level2 的,像什么太極拳,七傷拳,梯云縱。哈哈哈

<div sec:authorize="hasRole('level2')">
<h3>高級(jí)武功秘籍</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)限時(shí)的區(qū)別,其實(shí)他們最終調(diào)用的都是hasAnyAuthorityName()方法,唯一不同的就是hasRole()在調(diào)用時(shí),傳遞了前綴defaultRolePrefix,這就導(dǎo)致了他們兩者之間比較的字符產(chǎn)生了差異。spring security應(yīng)該想代表的意思就是權(quán)限字符加了ROLE_就是角色Role,如果沒(méi)有加就是一個(gè)權(quán)限Authority。

SpringSecurity 都有為我們提供。

到此這篇關(guān)于SpringBoot--- SpringSecurity進(jìn)行注銷,權(quán)限控制的文章就介紹到這了,更多相關(guān)SpringSecurity注銷 權(quán)限控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射

    這篇文章主要介紹了resultMap的用法及關(guān)聯(lián)結(jié)果集映射操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java 詳解異常的處理機(jī)制

    Java 詳解異常的處理機(jī)制

    異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的。比如你的代碼少一個(gè)分號(hào),那運(yùn)行出來(lái)結(jié)果是提示是錯(cuò)誤 java.lang.Error;如果你用System.out.println(11/0),那你是因?yàn)橛?做了除數(shù),會(huì)拋出 java.lang.ArithmeticException 的異常
    2021-11-11
  • idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作

    idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作

    這篇文章主要介紹了idea2019.1.4 鼠標(biāo)放到方法上顯示注解的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • spring中@Bean和@Component的區(qū)別及說(shuō)明

    spring中@Bean和@Component的區(qū)別及說(shuō)明

    文章主要介紹了@Bean和@Component兩個(gè)注解在Spring框架中的定義、作用范圍、創(chuàng)建方式、掃描和識(shí)別機(jī)制以及使用場(chǎng)景和建議
    2024-12-12
  • Java中Volatile的作用實(shí)例解析

    Java中Volatile的作用實(shí)例解析

    本篇文章給大家通過(guò)實(shí)例分享了Java中Volatile的作用,有興趣的朋友可以學(xué)習(xí)參考下。
    2018-07-07
  • springboot枚舉類型傳遞的步驟

    springboot枚舉類型傳遞的步驟

    這篇文章主要介紹了springboot枚舉類型傳遞的步驟,幫助大家更好的理解和學(xué)習(xí)使用springboot,感興趣的朋友可以了解下
    2021-04-04
  • Java可視化之實(shí)現(xiàn)文本的加密和解密

    Java可視化之實(shí)現(xiàn)文本的加密和解密

    這篇文章主要介紹了Java可視化之實(shí)現(xiàn)文本的加密和解密,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 手動(dòng)模擬JDK動(dòng)態(tài)代理的方法

    手動(dòng)模擬JDK動(dòng)態(tài)代理的方法

    這篇文章主要介紹了手動(dòng)模擬JDK動(dòng)態(tài)代理的方法,幫助大家更好的了解和學(xué)習(xí)Java 代理的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11
  • Java解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題的方法詳解

    Java解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題的方法詳解

    在 Java 中,浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題指的是使用浮點(diǎn)數(shù)進(jìn)行運(yùn)算時(shí),由于浮點(diǎn)數(shù)的內(nèi)部表示方式和十進(jìn)制數(shù)的表示方式存在差異,導(dǎo)致計(jì)算結(jié)果可能出現(xiàn)誤差,本文就給大家介紹一下Java如何解決浮點(diǎn)數(shù)計(jì)算不精確問(wèn)題,需要的朋友可以參考下
    2023-09-09
  • 如何開(kāi)發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    如何開(kāi)發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    HTTP/HTTPS是最常見(jiàn)的協(xié)議套件之一,并且隨著智能手機(jī)的成功,它的應(yīng)用也日益廣泛,因?yàn)閷?duì)于任何公司來(lái)說(shuō),擁有一個(gè)可以被移動(dòng)設(shè)備訪問(wèn)的網(wǎng)站幾乎是必須的。下面就來(lái)看看如何開(kāi)發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序
    2021-06-06

最新評(píng)論

杭锦后旗| 诸城市| 五大连池市| 富宁县| 五常市| 广丰县| 寿光市| 新河县| 固原市| 湄潭县| 宜都市| 鄂托克前旗| 石阡县| 栾城县| 永州市| 巴东县| 紫云| 祁东县| 平凉市| 株洲市| 客服| 霍邱县| 志丹县| 高青县| 甘南县| 黄石市| 陇川县| 微博| 海阳市| 雅安市| 绿春县| 湟源县| 柳林县| 公主岭市| 商丘市| 德庆县| 泊头市| 牡丹江市| 获嘉县| 化州市| 会同县|