成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Security 實(shí)戰(zhàn)干貨:WebSecurity和HttpSecurity的關(guān)系

開發(fā) 前端
前幾天有粉絲私信我:WebSecurity和HttpSecurity啥關(guān)系?當(dāng)時(shí)給我問住了,我大概只知道它們之間的關(guān)系類似TypeScript和JavaScript的關(guān)系,但是具體的細(xì)節(jié)確實(shí)不太清楚。因此就在周末簡單研究了一下。

[[393896]]

前幾天有粉絲私信我:WebSecurity和HttpSecurity啥關(guān)系?當(dāng)時(shí)給我問住了,我大概只知道它們之間的關(guān)系類似TypeScript和JavaScript的關(guān)系,但是具體的細(xì)節(jié)確實(shí)不太清楚。因此就在周末簡單研究了一下。

HttpSecurity的本質(zhì)

前幾天在Spring Security 5.4的新玩法中介紹了一種新的配置HttpSecurity的方式:

  1. @Bean 
  2. SecurityFilterChain filterChain(HttpSecurity http) throws Exception { 
  3.     return http 
  4.             .antMatcher("/**"
  5.             .authorizeRequests(authorize -> authorize 
  6.                     .anyRequest().authenticated() 
  7.             ) 
  8.             .build(); 

其實(shí)就能夠知道HttpSecurity是用來構(gòu)建包含了一系列過濾器鏈的過濾器SecurityFilterChain,平常我們的配置就是圍繞構(gòu)建SecurityFilterChain進(jìn)行。還得拿出這張老圖:

安全過濾鏈

從上面這個(gè)圖中可以看出構(gòu)建好的還要交給FilterChainProxy來代理,是不是有點(diǎn)多此一舉?

WebSecurity的本質(zhì)

在有些情況下這種確實(shí)多此一舉, 不過更多時(shí)候我們可能需要配置多個(gè)SecurityFilterChain來實(shí)現(xiàn)對多種訪問控制策略。

多個(gè)SecurityFilterChain

為了精細(xì)化的管理多個(gè)SecurityFilterChain的生命周期,搞一個(gè)統(tǒng)一管理這些SecurityFilterChain的代理就十分必要了,這就是WebSecurity的意義。下面是WebSecurity的build方法的底層邏輯:

  1. @Override 
  2. protected Filter performBuild() throws Exception { 
  3.    Assert.state(!this.securityFilterChainBuilders.isEmpty(), 
  4.          () -> "At least one SecurityBuilder<? extends SecurityFilterChain> needs to be specified. " 
  5.                + "Typically this is done by exposing a SecurityFilterChain bean " 
  6.                + "or by adding a @Configuration that extends WebSecurityConfigurerAdapter. " 
  7.                + "More advanced users can invoke " + WebSecurity.class.getSimpleName() 
  8.                + ".addSecurityFilterChainBuilder directly"); 
  9.     // 被忽略請求的個(gè)數(shù) 和 httpscurity的個(gè)數(shù) 構(gòu)成了過濾器鏈集合的大小 
  10.    int chainSize = this.ignoredRequests.size() + this.securityFilterChainBuilders.size(); 
  11.    List<SecurityFilterChain> securityFilterChains = new ArrayList<>(chainSize); 
  12.     // 初始化過濾器鏈集合中的 忽略請求過濾器鏈     
  13.     for (RequestMatcher ignoredRequest : this.ignoredRequests) { 
  14.       securityFilterChains.add(new DefaultSecurityFilterChain(ignoredRequest)); 
  15.    } 
  16.     // 初始化過濾器鏈集合中的 httpsecurity定義的過濾器鏈 
  17.    for (SecurityBuilder<? extends SecurityFilterChain> securityFilterChainBuilder : this.securityFilterChainBuilders) { 
  18.       securityFilterChains.add(securityFilterChainBuilder.build()); 
  19.    } 
  20.    FilterChainProxy filterChainProxy = new FilterChainProxy(securityFilterChains); 
  21.    if (this.httpFirewall != null) { 
  22.        // 請求防火墻 
  23.       filterChainProxy.setFirewall(this.httpFirewall); 
  24.    } 
  25.    if (this.requestRejectedHandler != null) { 
  26.        // 請求拒絕處理器 
  27.       filterChainProxy.setRequestRejectedHandler(this.requestRejectedHandler); 
  28.    } 
  29.    filterChainProxy.afterPropertiesSet(); 
  30.  
  31.    Filter result = filterChainProxy; 
  32.    if (this.debugEnabled) { 
  33.       this.logger.warn("\n\n" + "********************************************************************\n" 
  34.             + "**********        Security debugging is enabled.       *************\n" 
  35.             + "**********    This may include sensitive information.  *************\n" 
  36.             + "**********      Do not use in a production system!     *************\n" 
  37.             + "********************************************************************\n\n"); 
  38.       result = new DebugFilter(filterChainProxy); 
  39.    } 
  40.    this.postBuildAction.run(); 
  41.    return result; 

從上面中的源碼可以看出,WebSecurity用來構(gòu)建一個(gè)名為springSecurityFilterChain的Spring BeanFilterChainProxy 。它的作用是來定義那些請求忽略安全控制,那些請求必須安全控制,在合適的時(shí)候清除SecurityContext以避免內(nèi)存泄漏,同時(shí)也可以用來定義請求防火墻和請求拒絕處理器,另外我們開啟Spring Seuciry Debug模式也是這里配置的。

同時(shí)還有一個(gè)作用可能是其它文章沒有提及的,F(xiàn)ilterChainProxy是Spring Security對Spring framework應(yīng)用的唯一出口,然后通過它與一個(gè)Servlet在Spring的橋接代理DelegatingFilterProxy結(jié)合構(gòu)成Spring對Servlet體系的唯一出口。這樣就將Spring Security、Spring framework、Servlet API三者隔離了起來。

總結(jié)

 

我們事實(shí)上可以認(rèn)為,WebSecurity是Spring Security對外的唯一出口,而HttpSecurity只是內(nèi)部安全策略的定義方式;WebSecurity對標(biāo)FilterChainProxy,而HttpSecurity則對標(biāo)SecurityFilterChain,另外它們的父類都是AbstractConfiguredSecurityBuilder。掌握了這些基本上你就能知道它們之間的區(qū)別是什么了。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2021-04-23 07:33:10

SpringSecurity單元

2021-01-28 09:50:29

分布式對象SharedObjec

2021-05-31 07:18:46

SpringSecurity信息

2019-11-22 09:40:40

SpringJava編程語言

2023-04-10 11:41:15

2021-08-29 18:36:57

項(xiàng)目

2009-06-18 14:18:23

Spring secu

2022-01-26 00:05:00

接口Spring管理器

2009-07-21 16:49:41

整合iBatis和SpSqlMapClien

2022-05-19 11:29:14

計(jì)時(shí)攻擊SpringSecurity

2022-11-26 00:00:02

2023-12-08 12:12:21

2022-08-30 08:50:07

Spring權(quán)限控制

2020-03-31 14:57:56

數(shù)據(jù)挖掘OLAP統(tǒng)計(jì)

2022-08-15 08:42:46

權(quán)限控制Spring

2022-08-30 08:36:13

Spring權(quán)限控制

2022-08-30 08:55:49

Spring權(quán)限控制

2022-08-15 08:45:21

Spring權(quán)限控制

2022-06-16 10:38:24

URL權(quán)限源代碼

2022-08-30 08:43:11

Spring權(quán)限控制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩视频免费看 | 中文精品视频 | 中文精品视频 | 99精品免费视频 | 亚洲一区二区视频 | 色必久久 | 99tv| 日韩欧美三级 | 成人亚洲性情网站www在线观看 | 色综合天天天天做夜夜夜夜做 | 91网站在线看| 国产综合久久 | 网站黄色av | 亚洲人成人一区二区在线观看 | a级毛片免费高清视频 | 香蕉91| 国产精品久久亚洲 | 久久久久国产精品一区二区 | 久久久久久国模大尺度人体 | 6080yy精品一区二区三区 | 亚洲视频一区二区三区 | 伊人91在线 | 日韩成人在线视频 | 在线成人免费av | 奇米超碰在线 | 精品久久久久久久久久久久 | 久久精品成人热国产成 | 一区二区亚洲 | 理论片午午伦夜理片影院 | 日日射夜夜骑 | 国产丝袜人妖cd露出 | av电影一区二区 | 日本中文字幕视频 | 欧美日韩国产一区二区三区 | 亚洲成人中文字幕 | 国产乱码久久久久久 | 免费在线观看成人 | 老司机成人在线 | 精品久久久久久久久久久下田 | www久久国产 | 韩国主播午夜大尺度福利 |