欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Security中的Servlet過(guò)濾器體系代碼分析

 更新時(shí)間:2020年07月06日 15:12:48   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了Spring Security中的Servlet過(guò)濾器體系,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1. 前言

我在Spring Security 實(shí)戰(zhàn)干貨:內(nèi)置 Filter 全解析對(duì)Spring Security的內(nèi)置過(guò)濾器進(jìn)行了羅列,但是Spring Security真正的過(guò)濾器體系才是我們了解它是如何進(jìn)行"認(rèn)證"、“授權(quán)”、“防止利用漏洞”的關(guān)鍵。

2. Servlet Filter體系

這里我們以Servlet Web為討論目標(biāo),Reactive Web暫不討論。我們先來(lái)看下最基礎(chǔ)的Servlet體系,在Servlet體系中客戶(hù)端發(fā)起一個(gè)請(qǐng)求過(guò)程是經(jīng)過(guò)0到N個(gè)Filter然后交給Servlet處理。

Filter不但可以修改HttpServletRequestHttpServletResponse,可以讓我們?cè)谡?qǐng)求響應(yīng)的前后做一些事情,甚至可以終止過(guò)濾器鏈FilterChain的傳遞。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
 // 請(qǐng)求被servlet 處理前 
 if(condition){
 // 根據(jù)條件來(lái)進(jìn)入下一個(gè)過(guò)濾器
 chain.doFilter(request, response); 
 }
 // 請(qǐng)求被執(zhí)行完畢后處理一些事情 
 }

由于Filter僅影響下游Filters和Servlet,因此每個(gè)Filter調(diào)用的順序非常重要。Spring Security正是根據(jù)這個(gè)個(gè)特性來(lái)實(shí)現(xiàn)一系列的安全功能。接下來(lái)我們來(lái)看看它們是如何結(jié)合的。

3. GenericFilterBean

在該系列的文章開(kāi)篇我對(duì)Spring Security和Shiro進(jìn)行了簡(jiǎn)單的對(duì)比。Spring Security利用了Spring IOC和AOP的特性而無(wú)法脫離Spring獨(dú)立存在,而Apache Shiro可以獨(dú)立存在。所以今天我們要一探究竟,看看他們是如何結(jié)合的。

Spring結(jié)合Servlet Filter自然是要為Servlet Filter注入Spring Bean的特性,所以就搞出了一個(gè)抽象Filter Bean,這個(gè)抽象過(guò)濾器GenericFilterBean并不是在Spring Security下,而是Spring Web體系中,類(lèi)圖如下:

從類(lèi)圖上看Filter接口已經(jīng)被注入了多個(gè)Spring Bean的特性,納入了Spring Bean生命周期,使得Spring IoC容器能夠充分的管理Filter

4. DelegatingFilterProxy

我們希望Servlet能夠按照它自己的標(biāo)準(zhǔn)來(lái)注冊(cè)到過(guò)濾器鏈中工作,但是同時(shí)也希望它能夠被Spring IoC管理,所以Spring提供了一個(gè)GenericFilterBean的實(shí)現(xiàn)DelegatingFilterProxy。我們可以將原生的Servlet Filter或者Spring Bean Filter委托給DelegatingFilterProxy,然后在結(jié)合到Servlet FilterChain中。

5. SecurityFilterChain

針對(duì)不同符合Ant Pattern的請(qǐng)求可能會(huì)走不同的過(guò)濾器鏈,比如登錄會(huì)去驗(yàn)證,然后返回登錄結(jié)果;管理后臺(tái)的接口走后臺(tái)的安全邏輯,應(yīng)用客戶(hù)端的接口走客戶(hù)端的安全邏輯。Spring Security提供了一個(gè)SecurityFilterChain接口來(lái)滿(mǎn)足被匹配HttpServletRequest走特定的過(guò)濾器鏈的需求。

public interface SecurityFilterChain {
 // 判斷請(qǐng)求 是否符合該過(guò)濾器鏈的要求
 boolean matches(HttpServletRequest request);
 // 對(duì)應(yīng)的過(guò)濾器鏈
 List<Filter> getFilters();
}

6. FilterChainProxy

不同的SecurityFilterChain應(yīng)該是互斥而且平等的,它們之間不應(yīng)該是上下游關(guān)系。

如上圖請(qǐng)求被匹配到不同的SecurityFilterChain然后在執(zhí)行剩余的過(guò)濾器鏈。它們經(jīng)過(guò)SecurityFilterChain的總流程是相似的,而且有些時(shí)候特定的一些SecurityFilterChain也需要被集中管理來(lái)實(shí)現(xiàn)特定一攬子的請(qǐng)求的過(guò)濾邏輯。所以就有了另外一個(gè)GenericFilterBean實(shí)現(xiàn)來(lái)做這個(gè)事情,它就是FilterChainProxy。它的作用就是攔截符合條件的請(qǐng)求,然后根據(jù)請(qǐng)求篩選出符合要求的SecurityFilterChain,然后鏈?zhǔn)降膱?zhí)行這些Filter,最后繼續(xù)執(zhí)行剩下的FilterChain。

擴(kuò)展閱讀:Spring Security 過(guò)濾器鏈

7. 總結(jié)

結(jié)合上面,最終上述這些概念的關(guān)系徹底搞清楚了,搞清楚過(guò)濾器的運(yùn)作模式對(duì)于學(xué)習(xí)和使用Spring Security至關(guān)重要。

到此這篇關(guān)于Spring Security中的Servlet過(guò)濾器體系的文章就介紹到這了,更多相關(guān)Spring Security Servlet過(guò)濾器體系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • kafka消費(fèi)不到數(shù)據(jù)的排查過(guò)程

    kafka消費(fèi)不到數(shù)據(jù)的排查過(guò)程

    這篇文章主要介紹了kafka消費(fèi)不到數(shù)據(jù)的排查過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Mybatis中的自定義映射resultMap

    Mybatis中的自定義映射resultMap

    在MyBatis中,自定義映射resultMap可以讓你精確控制如何將數(shù)據(jù)庫(kù)返回的結(jié)果集映射到Java對(duì)象上,本文給介紹了Mybatis之自定義映射resultMap,需要的朋友可以參考下
    2024-03-03
  • Java 前臺(tái)加后臺(tái)精品圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)

    Java 前臺(tái)加后臺(tái)精品圖書(shū)管理系統(tǒng)的實(shí)現(xiàn)

    相信每一個(gè)學(xué)生學(xué)編程的時(shí)候,應(yīng)該都會(huì)寫(xiě)一個(gè)小項(xiàng)目——圖書(shū)管理系統(tǒng)。為什么這么說(shuō)呢?我認(rèn)為一個(gè)學(xué)校的氛圍很大一部分可以從圖書(shū)館的氛圍看出來(lái),而圖書(shū)管理系統(tǒng)這個(gè)不大不小的項(xiàng)目,接觸的多,也比較熟悉,不會(huì)有陌生感,能夠練手,又有些難度,所以我的小項(xiàng)目也來(lái)了
    2021-11-11
  • Java tomcat手動(dòng)配置servlet詳解

    Java tomcat手動(dòng)配置servlet詳解

    這篇文章主要為大家介紹了tomcat手動(dòng)配置servlet,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Spring MVC異常處理機(jī)制示例詳解

    Spring MVC異常處理機(jī)制示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC異常處理機(jī)制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring MVC具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 深入了解Java對(duì)象的克隆

    深入了解Java對(duì)象的克隆

    這篇文章主要介紹了Java對(duì)象的克隆的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • 解析JDK14中的java tools簡(jiǎn)介

    解析JDK14中的java tools簡(jiǎn)介

    這篇文章主要介紹了JDK14中的java tools簡(jiǎn)介,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java實(shí)現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    Java實(shí)現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)頁(yè)面上傳一個(gè)源碼壓縮包,后端將壓縮包解壓,并獲取每個(gè)文件中的內(nèi)容,感興趣的可以動(dòng)手嘗試一下
    2022-07-07
  • java springmvc實(shí)現(xiàn)驗(yàn)證碼功能

    java springmvc實(shí)現(xiàn)驗(yàn)證碼功能

    這篇文章主要為大家詳細(xì)介紹了java springmvc實(shí)現(xiàn)驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 用JAVA 設(shè)計(jì)生成二維碼詳細(xì)教程

    用JAVA 設(shè)計(jì)生成二維碼詳細(xì)教程

    本文主要介紹用JAVA 設(shè)計(jì)生成二維碼,這里一步一步詳細(xì)介紹用 java 如何設(shè)計(jì)二維碼,并附有代碼示例以便參考,有需要的小伙伴可以參考下
    2016-08-08

最新評(píng)論