国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Spring Security中的Servlet過濾器體系代碼分析

瀏覽:82日期:2023-08-29 11:20:29

1. 前言

我在Spring Security 實戰(zhàn)干貨:內置 Filter 全解析對Spring Security的內置過濾器進行了羅列,但是Spring Security真正的過濾器體系才是我們了解它是如何進行'認證'、“授權”、“防止利用漏洞”的關鍵。

2. Servlet Filter體系

這里我們以Servlet Web為討論目標,Reactive Web暫不討論。我們先來看下最基礎的Servlet體系,在Servlet體系中客戶端發(fā)起一個請求過程是經過0到N個Filter然后交給Servlet處理。

Spring Security中的Servlet過濾器體系代碼分析

Filter不但可以修改HttpServletRequest和HttpServletResponse,可以讓我們在請求響應的前后做一些事情,甚至可以終止過濾器鏈FilterChain的傳遞。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // 請求被servlet 處理前 if(condition){ // 根據條件來進入下一個過濾器 chain.doFilter(request, response); } // 請求被執(zhí)行完畢后處理一些事情 }

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

3. GenericFilterBean

在該系列的文章開篇我對Spring Security和Shiro進行了簡單的對比。Spring Security利用了Spring IOC和AOP的特性而無法脫離Spring獨立存在,而Apache Shiro可以獨立存在。所以今天我們要一探究竟,看看他們是如何結合的。

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

Spring Security中的Servlet過濾器體系代碼分析

從類圖上看Filter接口已經被注入了多個Spring Bean的特性,納入了Spring Bean生命周期,使得Spring IoC容器能夠充分的管理Filter。

4. DelegatingFilterProxy

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

Spring Security中的Servlet過濾器體系代碼分析

5. SecurityFilterChain

針對不同符合Ant Pattern的請求可能會走不同的過濾器鏈,比如登錄會去驗證,然后返回登錄結果;管理后臺的接口走后臺的安全邏輯,應用客戶端的接口走客戶端的安全邏輯。Spring Security提供了一個SecurityFilterChain接口來滿足被匹配HttpServletRequest走特定的過濾器鏈的需求。

public interface SecurityFilterChain { // 判斷請求 是否符合該過濾器鏈的要求 boolean matches(HttpServletRequest request); // 對應的過濾器鏈 List<Filter> getFilters();}

Spring Security中的Servlet過濾器體系代碼分析

6. FilterChainProxy

不同的SecurityFilterChain應該是互斥而且平等的,它們之間不應該是上下游關系。

Spring Security中的Servlet過濾器體系代碼分析

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

擴展閱讀:Spring Security 過濾器鏈

7. 總結

結合上面,最終上述這些概念的關系徹底搞清楚了,搞清楚過濾器的運作模式對于學習和使用Spring Security至關重要。

Spring Security中的Servlet過濾器體系代碼分析

到此這篇關于Spring Security中的Servlet過濾器體系的文章就介紹到這了,更多相關Spring Security Servlet過濾器體系內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 欧美一级网 | 国产精品成人免费视频不卡 | 日韩高清在线播放不卡 | 国产精品免费_区二区三区观看 | 91大神大战丝袜美女在线观看 | 国产成人一区二区三区免费观看 | 欧美a级在线观看 | 精品国产自在在线在线观看 | 日日干日日操日日射 | 韩国在线精品福利视频在线观看 | 国产一区私人高清影院 | 国产天堂亚洲精品 | 亚洲国产欧美另类 | 久久精品免视着国产成人 | 亚洲欧洲eeea在线观看 | 日韩一级在线播放免费观看 | 免费一级 一片一毛片 | 综合成人在线 | 中文字幕精品一区二区三区视频 | 成人久久18免费软件 | 黄色毛片视频在线观看 | 欧美成人久久久免费播放 | 欧美日韩色黄大片在线视频 | 日本乱人伦片中文字幕三区 | 男人的天堂视频在线观看 | 欧美日韩在线视频免费完整 | 午夜dj视频完整社区 | 欧美一级成人影院免费的 | 中国黄色一级大片 | 国产三级三级三级 | 国产三级在线视频观看 | 久久久精品久久视频只有精品 | 日韩字幕一中文在线综合 | 精品国产美女福利到在线不卡 | 国产99视频精品免费观看7 | 日本红怡院亚洲红怡院最新 | 日本加勒比网站 | 精品亚洲永久免费精品 | 久草在线免费资源 | 亚洲国产精品线在线观看 | 国产欧美日韩高清专区手机版 |