<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          今天跟大家聊聊 Spring Security 的前世今生

          共 2176字,需瀏覽 5分鐘

           ·

          2020-09-16 19:36

          最近有小伙伴問(wèn)我 Spring Security 相關(guān)知識(shí),索性我就寫(xiě)點(diǎn)這方面的文章給大家,希望大家看了會(huì)有點(diǎn)收獲。

          前世今生

          Spring Security的前身并非稱(chēng)呼為Spring Security,而是叫Acegi Security;但這并不意味著它與Spring毫無(wú)關(guān)系,它仍然是為Spring提供安全支持的。

          Acegi Security搭上了Spring的便車(chē),搖身一變成為Spring Security,但即便如此其還是繼承了Acegi Security的臃腫繁瑣的配置,學(xué)習(xí)成本相對(duì)還是十分的高。

          直到有一天,Spring Boot橫空出世,提出約定優(yōu)于配置等理念,極大的簡(jiǎn)化了繁瑣的配置;Spring Security也收益于此,一飛沖天。

          功能介紹

          安全這個(gè)話(huà)題繞不開(kāi) 認(rèn)證授權(quán) 這兩個(gè)方面,Spring Security也是如此,其作為一個(gè)權(quán)限管理框架,最核心的功能有:

          • 認(rèn)證(你是誰(shuí)?)

          • 授權(quán)(你能做什么?)

          • 攻擊防護(hù)(防止偽造身份)

          Spring Security提供了很多的認(rèn)證和授權(quán)方案,但作為一個(gè)優(yōu)秀的開(kāi)放框架,它的優(yōu)點(diǎn)更在于“擴(kuò)展性”,當(dāng)其提供的認(rèn)證或授權(quán)方案無(wú)法滿(mǎn)足我們的需求時(shí),我們可以自定義認(rèn)證或授權(quán)邏輯。例如后續(xù)會(huì)講解到的《認(rèn)證(三):驗(yàn)證碼認(rèn)證登錄模式》。

          實(shí)現(xiàn)原理

          Spring Security底層是通過(guò)一組過(guò)濾器鏈來(lái)實(shí)現(xiàn)的,過(guò)濾器鏈上的每個(gè) Filter 各司其職,但同時(shí)又相互關(guān)聯(lián);因此了解 Filter 的順序就顯得十分的重要,下面會(huì)介紹幾個(gè)比較核心的Filter

          過(guò)濾器鏈

          如圖所示,一個(gè)請(qǐng)求在到達(dá)API之前會(huì)經(jīng)過(guò)Spring Security的過(guò)濾器鏈進(jìn)行校驗(yàn),只有"合法規(guī)范"的請(qǐng)求才能被API所接收。

          熒光綠的都屬認(rèn)證過(guò)濾器,我們可以配置其是否生效,也可以自定義認(rèn)證過(guò)濾器添加到過(guò)濾器鏈上,可控性相對(duì)比較高;其他的深藍(lán)色ExceptionTranslationFilter和橘色FilterSecurityinterecptor則沒(méi)法隨意的控制。

          備注:為避免引入過(guò)多的概念,該過(guò)濾器鏈并非完整的鏈路圖,只是截圖了部分過(guò)濾器。

          1. 表單登錄過(guò)濾器

          UsernamePasswordAuthenticationFilter 是表單登錄過(guò)濾器,表單登錄也是我們最常見(jiàn)的登錄方式;對(duì)于表單登錄過(guò)濾器來(lái)說(shuō),它的主要職責(zé)為:

          • 檢查請(qǐng)求是否為登錄請(qǐng)求&檢查請(qǐng)求中是否含有自身需要的認(rèn)證信息(username、password)。

          • 如果不滿(mǎn)足則放行讓下一個(gè)過(guò)濾器進(jìn)行校驗(yàn),如符合自身認(rèn)證要求則進(jìn)行認(rèn)證。

          2. Basic認(rèn)證過(guò)濾器

          BasicAuthenticationFilter 過(guò)濾器是用來(lái)處理Http請(qǐng)求中的Basic Authorization頭部;當(dāng)一個(gè) Http請(qǐng)求頭(Reqeust Header)中包含Authorization,并且其值為 Basic xxx的時(shí)候,BasicAuthenticationFilter就會(huì)生效。

          主要職責(zé):

          • 嘗試解析 Http basic authorization獲取相應(yīng)的認(rèn)證信息(username、password)。

          • 如果不滿(mǎn)足則放行讓下一個(gè)過(guò)濾器進(jìn)行校驗(yàn),如符合則自身進(jìn)行認(rèn)證。

          3. 異常轉(zhuǎn)換過(guò)濾器

          ExceptionTranslationFilter 是一個(gè)異常過(guò)濾器,用來(lái)處理 認(rèn)證授權(quán)過(guò)程中拋出的異常,這個(gè)很好理解;正如我們自身項(xiàng)目會(huì)有異常處理一般,Spring Security也有對(duì)應(yīng)的異常處理機(jī)制。

          該過(guò)濾器的主要職責(zé)是對(duì)在 FilterChain 范圍內(nèi)拋出的AccessDeniedException(授權(quán)異?;?lèi))AuthenticationException(認(rèn)證異常基類(lèi)),轉(zhuǎn)換為對(duì)應(yīng)的HTTP錯(cuò)誤碼返回或者返回對(duì)應(yīng)的頁(yè)面。

          4. FilterSecurityInterceptor過(guò)濾器

          FilterSecurityInterceptor過(guò)濾器位于過(guò)濾器鏈上的最后一環(huán),其主要負(fù)責(zé)的是:權(quán)限的校驗(yàn);判斷請(qǐng)求的用戶(hù)是否有權(quán)限訪(fǎng)問(wèn)該API。保護(hù)web Uri 并且在訪(fǎng)問(wèn)被拒絕時(shí)拋出異常。

          總結(jié)

          本篇文章為 Spring Security 系列文章的概述篇,主要介紹了Spring Security的前世今生、提供的主要功能、以及其實(shí)現(xiàn)原理的粗略探討。后面我繼續(xù)跟大家深入講解。

          過(guò)濾器鏈

          -END-


          近期熱門(mén)推薦?

          1.為什么建議大家使用 Linux 開(kāi)發(fā)?爽(外加七個(gè)感嘆號(hào))

          2.為什么 Java 中“1000==1000”為false,而”100==100“為true?

          2.我去頭條面試,面試官問(wèn)我如何設(shè)計(jì)好API,看看我是如何吊打面試官的!

          3.再見(jiàn)!Swagger、Knife4j!

          4.一個(gè)依賴(lài)搞定 Spring Boot 反爬蟲(chóng),防止接口盜刷!

          5.Springboot啟動(dòng)擴(kuò)展點(diǎn)超詳細(xì)總結(jié),再也不怕面試官問(wèn)了


          如有文章對(duì)你有幫助,

          在看轉(zhuǎn)發(fā)是對(duì)我最大的支持!



          關(guān)注Java開(kāi)發(fā)寶典

          每天學(xué)習(xí)技術(shù)干貨



          點(diǎn)贊是最大的支持?

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  外网成人视频 | 天天日天天摸天天爽 | 精品久久电影 | 欧美A∨在线 | 天天干天天爽天天碰天天摸 |