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

Java Spring Security認(rèn)證與授權(quán)及注銷和權(quán)限控制篇綜合解析

 更新時(shí)間:2021年10月27日 09:21:17   作者:龍弟-idea  
Spring Security 是 Spring 家族中的一個(gè)安全管理框架,實(shí)際上,在 Spring Boot 出現(xiàn)之前,Spring Security 就已經(jīng)發(fā)展了多年了,但是使用的并不多,安全管理這個(gè)領(lǐng)域,一直是 Shiro 的天下

Spring Security簡(jiǎn)介:

Spring Security 是針對(duì)Spring項(xiàng)目的安全框架,也是Spring Boot底層安全模塊默認(rèn)的技術(shù)選型,它可以實(shí)現(xiàn)強(qiáng)大的Web安全控制,對(duì)于安全控制,我們只需要引入 spring-boot-starter-security 模塊,進(jìn)行少量的配置,即可實(shí)現(xiàn)強(qiáng)大的安全管理!

記住幾個(gè)類:

  • WebSecurityConfigurerAdapter:自定義Security策略
  • AuthenticationManagerBuilder:自定義認(rèn)證策略
  • @EnableWebSecurity:開(kāi)啟WebSecurity模式

Spring Security的兩個(gè)主要目標(biāo)是 “認(rèn)證” 和 “授權(quán)”(訪問(wèn)控制)。

“認(rèn)證”(Authentication)

身份驗(yàn)證是關(guān)于驗(yàn)證您的憑據(jù),如用戶名/用戶ID和密碼,以驗(yàn)證您的身份。

身份驗(yàn)證通常通過(guò)用戶名和密碼完成,有時(shí)與身份驗(yàn)證因素結(jié)合使用。

“授權(quán)” (Authorization)

授權(quán)發(fā)生在系統(tǒng)成功驗(yàn)證您的身份后,最終會(huì)授予您訪問(wèn)資源(如信息,文件,數(shù)據(jù)庫(kù),資金,位置,幾乎任何內(nèi)容)的完全權(quán)限。

這個(gè)概念是通用的,而不是只在Spring Security 中存在。

Spring Security 框架對(duì)于認(rèn)證和授權(quán)很好的支持。在用戶認(rèn)證方面,Spring Security 框架支持主流的認(rèn)證方式,包括 HTTP 基本認(rèn)證、HTTP 表單驗(yàn)證、HTTP 摘要認(rèn)證、OpenID 和 LDAP 等。在用戶授權(quán)方面,Spring Security 提供了基于角色的訪問(wèn)控制和訪問(wèn)控制列表(Access Control List,ACL),可以對(duì)應(yīng)用中的領(lǐng)域?qū)ο筮M(jìn)行細(xì)粒度的控制。

下面是spring security官網(wǎng):Spring Security 找到對(duì)應(yīng)的官方文檔:Spring Security Reference

實(shí)驗(yàn)環(huán)境搭建:

1.新建一個(gè)初始的springboot項(xiàng)目web模塊,thymeleaf模塊

2.導(dǎo)入靜態(tài)資源

3、controller跳轉(zhuǎn)!

4、測(cè)試實(shí)驗(yàn)環(huán)境是否成功

認(rèn)證和授權(quán)

我們測(cè)試的環(huán)境,是誰(shuí)都可以訪問(wèn),現(xiàn)在我們使用 Spring Security 增加上認(rèn)證和授權(quán)的功能

1、引入 Spring Security 模塊

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、編寫 Spring Security 配置類

參考對(duì)應(yīng)的官方文檔:Spring Security Reference

3、編寫基礎(chǔ)配置類

@EnableWebSecurity // 開(kāi)啟WebSecurity模式
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       
  }
}

4.定義授權(quán)的規(guī)則:

在配置類中看授權(quán)的源碼:

5、測(cè)試,發(fā)現(xiàn)除了首頁(yè)都進(jìn)不去了!因?yàn)槲覀兡壳皼](méi)有登錄的角色,因?yàn)檎?qǐng)求需要登錄的角色擁有對(duì)應(yīng)的權(quán)限才可以!

6、在configure()方法中加入以下配置,開(kāi)啟自動(dòng)配置的登錄功能!

從源碼解釋中看

// 開(kāi)啟自動(dòng)配置的登錄功能
// /login 請(qǐng)求來(lái)到登錄頁(yè)
// /login?error 重定向到這里表示登錄失敗
http.formLogin();

7、測(cè)試一下:發(fā)現(xiàn),沒(méi)有權(quán)限的時(shí)候,會(huì)跳轉(zhuǎn)到登錄的頁(yè)面!

8、查看剛才登錄頁(yè)的注釋信息;

我們可以定義認(rèn)證規(guī)則,從源碼中查看

重寫configure(AuthenticationManagerBuilder auth)方法

//定義認(rèn)證規(guī)則
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
   
   //在內(nèi)存中定義,也可以在jdbc中去拿....
   auth.inMemoryAuthentication()
          .withUser("kuangshen").password("123456").roles("vip2","vip3")
          .and()
          .withUser("root").password("123456").roles("vip1","vip2","vip3")
          .and()
          .withUser("guest").password("123456").roles("vip1","vip2");
}

9、測(cè)試,我們可以使用這些賬號(hào)登錄進(jìn)行測(cè)試!發(fā)現(xiàn)會(huì)報(bào)錯(cuò)!

There is no PasswordEncoder mapped for the id “null”

10、原因,我們要將前端傳過(guò)來(lái)的密碼進(jìn)行某種方式加密,否則就無(wú)法登錄,修改代碼

11、測(cè)試,登錄成功,并且每個(gè)角色只能訪問(wèn)自己認(rèn)證下的規(guī)則

權(quán)限控制和注銷

1、開(kāi)啟自動(dòng)配置的注銷的功能

2、在前端,增加一個(gè)注銷的按鈕,index.html 導(dǎo)航欄中

<a class="item" th:href="@{/logout}" rel="external nofollow" >
   <i class="sign-out icon"></i> 注銷
</a>

3、可以去測(cè)試一下,登錄成功后點(diǎn)擊注銷,發(fā)現(xiàn)注銷完畢會(huì)跳轉(zhuǎn)到登錄頁(yè)面!

4、但是,我們想讓他注銷成功后,依舊可以跳轉(zhuǎn)到首頁(yè),該怎么處理呢?

// .logoutSuccessUrl("/"); 注銷成功來(lái)到首頁(yè)
http.logout().logoutSuccessUrl("/");

5、測(cè)試,注銷完畢后,發(fā)現(xiàn)跳轉(zhuǎn)到首頁(yè)OK

6、現(xiàn)在來(lái)一個(gè)需求:用戶沒(méi)有登錄的時(shí)候,導(dǎo)航欄上只顯示登錄按鈕,用戶登錄之后,導(dǎo)航欄可以顯示登錄的用戶信息及注銷按鈕!還有就是,比如longdi這個(gè)用戶,它只有 vip2,vip3功能,那么登錄則只顯示這兩個(gè)功能,而vip1的功能菜單不顯示!這個(gè)就是真實(shí)的網(wǎng)站情況了!

我們需要結(jié)合thymeleaf中的一些功能

sec:authorize="isAuthenticated()":是否認(rèn)證登錄!來(lái)顯示不同的頁(yè)面

Maven依賴:

<dependency>
   <groupId>org.thymeleaf.extras</groupId>
   <artifactId>thymeleaf-extras-springsecurity5</artifactId>
   <version>3.0.4.RELEASE</version>
</dependency>

7、修改我們的 前端頁(yè)面

導(dǎo)入命名空間 xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"

修改導(dǎo)航欄,增加認(rèn)證判斷

8、重啟測(cè)試,可以登錄試試看,登錄成功后確實(shí),顯示了我們想要的頁(yè)面;

9、如果注銷404了,就是因?yàn)樗J(rèn)防止csrf跨站請(qǐng)求偽造,因?yàn)闀?huì)產(chǎn)生安全問(wèn)題,可以將請(qǐng)求改為post表單提交,或者在spring security中關(guān)閉csrf功能;試試在 配置中增加

10、繼續(xù)將下面的角色功能塊認(rèn)證完成!測(cè)試成功!

到此這篇關(guān)于Java Spring Security認(rèn)證與授權(quán)及注銷和權(quán)限控制篇綜合解析的文章就介紹到這了,更多相關(guān)Java Spring Security內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義Redis實(shí)現(xiàn)緩存序列化詳解

    SpringBoot自定義Redis實(shí)現(xiàn)緩存序列化詳解

    Spring提供了一個(gè)RedisTemplate來(lái)進(jìn)行對(duì)Redis的操作,但是RedisTemplate默認(rèn)配置的是使用Java本機(jī)序列化。如果要對(duì)對(duì)象操作,就不是那么的方便。所以本文為大家介紹了另一種SpringBoot結(jié)合Redis實(shí)現(xiàn)序列化的方法,需要的可以參考一下
    2022-07-07
  • maven項(xiàng)目無(wú)法讀取到resource文件夾的問(wèn)題

    maven項(xiàng)目無(wú)法讀取到resource文件夾的問(wèn)題

    這篇文章主要介紹了maven項(xiàng)目無(wú)法讀取到resource文件夾的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理

    使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理

    這篇文章主要介紹了使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java數(shù)據(jù)結(jié)構(gòu)(線性表)詳解

    Java數(shù)據(jù)結(jié)構(gòu)(線性表)詳解

    本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)(線性表)的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • MyBatis的五種批量查詢實(shí)例總結(jié)

    MyBatis的五種批量查詢實(shí)例總結(jié)

    為了提高代碼的執(zhí)行效率,我們有時(shí)需要采用批量查詢的查詢方法,下面這篇文章主要給大家介紹了關(guān)于MyBatis的五種批量查詢的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • SpringBoot集成kaptcha驗(yàn)證碼

    SpringBoot集成kaptcha驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了SpringBoot集成kaptcha驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 淺析Java中clone()方法淺克隆與深度克隆

    淺析Java中clone()方法淺克隆與深度克隆

    Java克隆(Clone)是Java語(yǔ)言的特性之一,本篇文章主要介紹了Java中的Clone機(jī)制是如何工作的,需要的朋友可以參考下
    2017-04-04
  • Spring?boot?自定義?Starter及自動(dòng)配置的方法

    Spring?boot?自定義?Starter及自動(dòng)配置的方法

    Starter?組件是?Spring?boot?的一個(gè)核心特性,Starter組件的出現(xiàn)極大的簡(jiǎn)化了項(xiàng)目開(kāi)發(fā),這篇文章主要介紹了Spring?boot?自定義?Starter?及?自動(dòng)配置,需要的朋友可以參考下
    2022-12-12
  • 解決java 命令行亂碼的問(wèn)題

    解決java 命令行亂碼的問(wèn)題

    這篇文章主要介紹了解決java 命令行亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • PowerShell用戶認(rèn)證Function實(shí)例代碼

    PowerShell用戶認(rèn)證Function實(shí)例代碼

    這篇文章主要介紹了PowerShell用戶認(rèn)證Function的資料,并附實(shí)例代碼,幫助大家學(xué)習(xí)理解,有需要的小伙伴可以參考下
    2016-09-09

最新評(píng)論

木里| 冕宁县| 宜昌市| 辛集市| 长治市| 教育| 柳州市| 柳州市| 浦城县| 三门峡市| 靖安县| 丰县| 城步| 十堰市| 昭通市| 桐乡市| 日喀则市| 绥宁县| 泸定县| 叶城县| 康乐县| 长宁区| 德州市| 南丹县| 石嘴山市| 濮阳县| 潜山县| 来安县| 常熟市| 广昌县| 新余市| 罗定市| 通榆县| 福海县| 保靖县| 凤台县| 东丽区| 龙州县| 嘉荫县| 洛隆县| 江都市|