在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Spring Security:用戶和Spring應(yīng)用之間的安全屏障

    Spring Security:用戶和Spring應(yīng)用之間的安全屏障

    一、前言

    1.歷史

    Spring Security最早叫Acegi Security,這個(gè)名稱并不是說它和Spring就沒有關(guān)系,它依然是為Spring框架提供安全支持的。Acegi Security基于Spring,可以幫助我們?yōu)?span id="rydlysx" class="wpcom_tag_link">項(xiàng)目建立豐富的角色與權(quán)限管理系統(tǒng)。Acegi Security雖然好用,但是最為人詬病的則是它臃腫繁瑣的配置,這一問題最終也遺傳給了Spring Security。Acegi Security最終被并入Spring Security項(xiàng)目中,并于2008年4月發(fā)布了改名后的第一個(gè)版本Spring Security 2.0.0。

    2.對(duì)比

    和Shiro相比,Spring Security重量級(jí)并且配置繁瑣。其實(shí)自從Spring Boot推出后,就徹底顛覆了傳統(tǒng)了JavaEE開發(fā),自動(dòng)化配置讓許多事情變得非常容易。在一個(gè)Spring Boot項(xiàng)目中,我們甚至只需要引入一個(gè)依賴,不需要任何額外配置,項(xiàng)目的所有接口就會(huì)被自動(dòng)保護(hù)起來了。在Spring Cloud中很多涉及安全管理的問題,也是一個(gè)Spring Security依賴兩行配置就能搞定,在和Spring家族的產(chǎn)品一起使用時(shí),Spring Security的優(yōu)勢(shì)就非常明顯了。因此在微服務(wù)時(shí)代,我們不需要糾結(jié)要不要學(xué)習(xí)Spring Security,我們要考慮的是如何快速掌握Spring Security,并且能夠使用Spring Security實(shí)現(xiàn)我們微服務(wù)的安全管理。

    3.為什么選擇

    不同于其他領(lǐng)域,在Java企業(yè)級(jí)開發(fā)中,安全管理方面的框架非常少,一般來說,主要有三種方案

    ? Shiro

    ? Spring Security

    ? 開發(fā)者自己實(shí)現(xiàn)

    Shiro本身是一個(gè)老牌的安全管理框架,有著眾多的優(yōu)點(diǎn),例如輕量、簡(jiǎn)單、易于集成,可以在JavaSE環(huán)境中使用等。不過在微服務(wù)面前,它無法充分展示自己的優(yōu)勢(shì)。也有開發(fā)者選擇自己實(shí)現(xiàn)安全管理,不過一個(gè)系統(tǒng)的安全,不僅僅是登錄和權(quán)限控制這么簡(jiǎn)單,我們還要考慮各種各樣可能存在的網(wǎng)絡(luò)攻擊以及防御策略,從這個(gè)角度來說,只有大公司才有足夠的人力物力去支持這件事情。 Spring Security作為Spring家族的一員,在和Spring家族的其他成員進(jìn)行整合時(shí),具有其他框架無可比擬的優(yōu)勢(shì),同時(shí)對(duì)OAuth2有著良好的支持,再加上Spring Cloud對(duì)Spring Security的不斷加持,讓Spring Security成為微服務(wù)項(xiàng)目的首選安全管理方案。

    二、Spring Security簡(jiǎn)介

    Spring Security的核心功能

    對(duì)于一個(gè)安全管理框架而言,無論是Shiro還是Spring Security,最核心的功能,無非就是如下兩方面認(rèn)證和授權(quán)。

    1.認(rèn)證

    認(rèn)證就是身份驗(yàn)證(你是誰?),作為一個(gè)開放的平臺(tái),我們還可以通過引入第三方依賴來支持更多的認(rèn)證方式,同時(shí),如果這些認(rèn)證方式無法滿足我們的需求,我們也可以自定義認(rèn)證邏輯,特別是當(dāng)我們和一些“老破舊”的系統(tǒng)進(jìn)行集成時(shí),自定義 認(rèn)證邏輯就顯得非常重要了。

    2.授權(quán)

    授權(quán)就是訪問控制(你可以做什么?),無論采用了哪種認(rèn)證方式,都不影響在Spring Security中使用授權(quán)功能。Spring Security支持基于URL的請(qǐng)求授權(quán)、支持方法訪問授權(quán)、支持SpEL訪問控制、支持域?qū)ο蟀踩ˋCL),同時(shí)也支持動(dòng)態(tài)權(quán)限配置、支持RBAC權(quán)限模型等,總之我們常見的權(quán)限管理需求,Spring Security基本上都是支持的。

    3.其他

    在認(rèn)證和授權(quán)這兩個(gè)核心功能之外,Spring Security還提供了很多安全管理的“周邊功能”,這也是一個(gè)非常重要的特色,例如:

    ? 密碼加密

    ? RememberMe

    ? 會(huì)話固定攻擊防御

    ? CSRF防御

    ? Http防火墻

    Spring Security 的整體架構(gòu)

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

    在Spring Security的架構(gòu)設(shè)計(jì)中,認(rèn)證(Authentication)和授權(quán)(Authorization)是分開的,無論使用什么樣的認(rèn)證方式,都不會(huì)影響授權(quán),這是兩個(gè)獨(dú)立的存在,這種獨(dú)立帶來的好處之一,就是Spring Security可以非常方便地整合一些外部的認(rèn)證方案。在Spring Security中,用戶的認(rèn)證信息主要由Authentication的實(shí)現(xiàn)類來保存,當(dāng)用戶使用用戶名/密碼登錄或使用Remember-me登錄時(shí),都會(huì)對(duì)應(yīng)一個(gè)不同的Authentication實(shí)例。Spring Security中的認(rèn)證工作主要是由AuthenticationManager接口來負(fù)責(zé),在該接口中通過authenticate方法來做認(rèn)證。AuthenticationManager最主要的實(shí)現(xiàn)類是ProviderManager,ProviderManager管理了眾多的 AuthenticationProvider實(shí)例。在一次完整的認(rèn)證流程中,可能會(huì)同時(shí)存在多個(gè)AuthenticationProvider,多個(gè)AuthenticationProvider統(tǒng)一由ProviderManager來管理。同時(shí),ProviderManager具有一個(gè)可選的parent,如果所有的AuthenticationProvider都認(rèn)證失敗,那么就會(huì)調(diào)用parent進(jìn)行認(rèn)證。

    2.關(guān)鍵接口

    在Spring Security的授權(quán)體系中,有兩個(gè)關(guān)鍵接口: AccessDecisionManager 和AccessDecisionVoter。

    AccessDecisionVoter是一個(gè)投票器,投票器會(huì)檢查用戶是否具備應(yīng)有的角色,進(jìn)而投出贊成、反對(duì)或者棄權(quán)票。

    AccessDecisionManager則是一個(gè)決策器,來決定此次訪問是否被允許。

    3.Web安全

    在Spring Security中,認(rèn)證、授權(quán)等功能都是基于過濾器來完成的。開發(fā)者所見到的Spring Security提供的功能,都是通過這些過濾器來實(shí)現(xiàn)的,這些過濾器按照既定的優(yōu)先級(jí)排列,最終形成一個(gè)過濾器鏈。開發(fā)者也可以自定義過濾器,并通過@Order注解去調(diào)整自定義過濾器在過濾器鏈中的位置。需要注意的是,默認(rèn)過濾器并不是直接放在Web項(xiàng)目的原生過濾器鏈中,而是通過一個(gè)FilterChainProxy來統(tǒng)一管理。Spring Security中的過濾器鏈通過FilterChainProxy嵌入到Web項(xiàng)目的原生過濾器鏈中。在Spring Security中,這樣的過濾器鏈不僅僅只有一個(gè)可能會(huì)有多個(gè)。當(dāng)存在多個(gè)過濾器鏈時(shí),多個(gè)過濾器鏈之間要指定優(yōu)先級(jí),當(dāng)請(qǐng)求到達(dá)后,會(huì)從FilterChainProxy進(jìn)行分發(fā),先和哪個(gè)過濾器鏈匹配上,就用哪個(gè)過濾器鏈進(jìn)行處理。

    三、Spring Security認(rèn)證流程分析

    1.基本認(rèn)證

    在Spring Boot項(xiàng)目中使用Spring Security非常方便,創(chuàng)建一個(gè)新的SpringBoot項(xiàng)目,我們只需要引入web和Spring Security依賴即可。

    Maven 項(xiàng)目加入下面的依賴

    引入依賴后,項(xiàng)目中的所有接口就都被保護(hù)起來了,此時(shí)訪問接口就可以看到登錄頁面了。

    2.Spring Security認(rèn)證流程分析

    AuthenticationManafer是一個(gè)認(rèn)證管理器。它定義了Spring Security過濾器要如何執(zhí)行認(rèn)證操作,在認(rèn)證成功后,會(huì)返回一個(gè)Authentication對(duì)象,這個(gè)對(duì)象會(huì)被設(shè)置到SecurityContextHodler中。AuthenticationManafer是一個(gè)接口,它有著諸多的實(shí)現(xiàn)類,開發(fā)者可以自定義AuthenticationManafer的實(shí)現(xiàn)類,不過在實(shí)際應(yīng)用中,我們使用最多的是ProviderManager,在Spring Security框架中,默認(rèn)也是使用ProviderManager。

    1)AuthentucationProvider

    Spring Security支持多種不同的認(rèn)證方式,不同的認(rèn)證方式對(duì)應(yīng)不同的身份類型,AuthentucationProvider就是針對(duì)不同的身份類型執(zhí)行具體的身份認(rèn)證。例如,常見的DaoAuthenticationProvider用來支持用戶名密碼登錄認(rèn)證, RememberMeAuthenticationProvider用來支持記住我的認(rèn)證。

    2)ProviderManager

    在Spring Security中,由于系統(tǒng)可能同時(shí)支持多種不同的認(rèn)證方式,例如同時(shí)支持用戶名/密碼認(rèn)證、RememberMe認(rèn)證、手機(jī)號(hào)碼動(dòng)態(tài)認(rèn)證等,而不同的認(rèn)證方式對(duì)應(yīng)了不同的AuthenticationProvider,所以一個(gè)完整的認(rèn)證流程可能由多個(gè)AuthenticationProvider來提供。多個(gè)AuthenticationProvider將組成一個(gè)列表這個(gè)列表將由ProviderManagerf代理。換句話說,在ProviderManager中存在一個(gè)AuthenticationProvider表在ProviderManager中遍歷列表中的每一個(gè)AuthenticationProvider去執(zhí)行身份認(rèn)證,最終得到認(rèn)證結(jié)果。ProviderManager本身也可以再配置一個(gè)AuthenticationManager作為parent,這樣當(dāng)ProviderManager認(rèn)證失敗之后,就可以進(jìn)入到parent中再次進(jìn)行認(rèn)證。理論上來說,ProviderManager的parent可以是任意類型的AuthenticationManager,但是通常都是由ProviderManager來扮演parent的角色,也就是ProviderManager是ProviderManager的parent。

    3)AbstractAuthenticationProcessingFilter

    AbstractAuthenticationProcessingFilter用來處理任何提交給它的身份認(rèn)證。

    四、Spring Security密碼加密

    1.常見實(shí)現(xiàn)類

    BcryptPasswordEncoder

    Argon2PasswordEncoder

    Pbkdf2PasswordEncoder

    ScryptPasswordEncoder

    2.DelegatingPasswordEncoder

    DelegatingPasswordEncoder是一個(gè)代理類,而并非一種全新的密碼加密方案。主要用來代理不同的密碼加密方案。為什么采用而不是某一個(gè)具體加密方式作為默認(rèn)的密碼加密方案呢?主要考慮了如下三方面的因素:

    (1)兼容性:使用DelegatingPasswordEncoder可以幫助許多使用舊密碼加密方式的系統(tǒng)順利遷移到中,它允許在同一個(gè)系統(tǒng)中同時(shí)存在多種不同的密碼加密方案。

    (2)便捷性:密碼存儲(chǔ)的最佳方案不可能一直不變,如果使用DelegatingPasswordEncoder作為默認(rèn)的密碼加密方案,當(dāng)需要修改加密方案時(shí),只需要修改很小一部分代碼就可以實(shí)現(xiàn)。

    (3)穩(wěn)定性:作為一個(gè)框架,不能經(jīng)常進(jìn)行重大更改,而使用DelegatingPasswordEncoder可以方便地對(duì)密碼進(jìn)行升級(jí)(自動(dòng)從一個(gè)加密方案升級(jí)到另外一個(gè)加密方案)。

    五、Spring Security會(huì)話管理

    1.什么是會(huì)話

    當(dāng)瀏覽器調(diào)用登錄接口登錄成功后,服務(wù)端會(huì)和瀏覽器之間建立一個(gè)會(huì)話(Session),瀏覽器在每次發(fā)送請(qǐng)求時(shí)都會(huì)攜帶一個(gè)SessionId,服務(wù)端則根據(jù)這個(gè)SessionId來判斷用戶身份。當(dāng)瀏覽器關(guān)閉后,服務(wù)端的Session并不會(huì)自動(dòng)銷毀,需要開發(fā)者手動(dòng)在服務(wù)端調(diào)用Session銷毀方法,或者等Session過期時(shí)間到了自動(dòng)銷毀。在Spring Security中,與HttpSession相關(guān)的功能由 SessionManagementFilter和SessionAuthenticationStrategy接口來處理, 過濾器將Session相關(guān)操作委托給SessionAuthenticationStrategy接口去完成。

    2.什么是會(huì)話并發(fā)管理?

    會(huì)話并發(fā)管理就是指在當(dāng)前系統(tǒng)中,同一個(gè)用戶可以同時(shí)創(chuàng)建多少個(gè)會(huì)話,如果一臺(tái)設(shè)備對(duì)應(yīng)一個(gè)會(huì)話,那么也可以簡(jiǎn)單理解為同一個(gè)用戶可以同時(shí)在多少臺(tái)設(shè)備上進(jìn)行登錄。默認(rèn)情況下,同一用戶在多少臺(tái)設(shè)備上登錄并沒有限制,不過開發(fā)者可以在Spring Security中對(duì)此進(jìn)行配置。

    3.擠下線

    當(dāng)會(huì)話并發(fā)數(shù)達(dá)到限制時(shí),新的會(huì)話將之前舊的會(huì)話擠下線,舊的登錄會(huì)話失效。配置如下

    4.限制登錄

    當(dāng)會(huì)話并發(fā)數(shù)達(dá)到限制時(shí),新的會(huì)話將被限制創(chuàng)建,除非舊的會(huì)話主動(dòng)退出登錄。

    5.什么是會(huì)話固定攻擊

    會(huì)話固定攻擊(Session fixation attacks)是一種潛在的風(fēng)險(xiǎn),惡意攻擊者有可能通過訪問當(dāng)前應(yīng)用程序來創(chuàng)建會(huì)話,然后誘導(dǎo)用戶以相同的會(huì)話登錄(通常是將會(huì)話作為參數(shù)放在請(qǐng)求鏈接中,然后誘導(dǎo)用戶去單擊),進(jìn)而獲取用戶的登錄身份。

    1.會(huì)話固定攻擊步驟

    (1)攻擊者自己可以正常訪問javaboy網(wǎng)站,在訪問的過程中,網(wǎng)站給攻擊者分配了一個(gè)。

    (2)攻擊者利用自己拿到的sessionId構(gòu)造一個(gè)javaboy網(wǎng)站的鏈接,并把該鏈接發(fā)送給受害者。

    (3)受害者使用該鏈接登錄javaboy網(wǎng)站(該鏈接中含有sessionId),登錄成功后,一個(gè)合法的會(huì)話就成功建立了。

    (4)攻擊者利用手里的冒充受害者。

    2.會(huì)話固定攻擊防御策略

    Spring Security中從三方面入手防范會(huì)話固定攻擊:

    (1)Spring Security中默認(rèn)自帶了Http防火墻,如果sessionId放在地址欄中,這個(gè)請(qǐng)求就會(huì)直接被攔截下來。

    (2)在http響應(yīng)的Set-Cookie字段中有HttpOnly屬性,這樣避免了通過XSS攻擊來獲取Cookie中的會(huì)話信息, 進(jìn)而達(dá)成會(huì)話固定攻擊。

    (3)在用戶登錄成功后,改變SessionId, Spring Security中默認(rèn)實(shí)現(xiàn)了該種方案。

    六、Spring Security防火墻

    1.什么是HttpFireWall

    HttpFirewall是Spring Security提供的Http防火墻,它可以用于拒絕潛在的危險(xiǎn)請(qǐng)求或者包裝這些請(qǐng)求進(jìn)而控制其行為。通過可以對(duì)各種非法請(qǐng)求提前進(jìn)行攔截并處理,降低損失。

    2.Spring Security 中的HttpFirewall兩個(gè)實(shí)現(xiàn)類

    ? DefaultHttpFirewall雖然名字中包含Default,但這并不是框架默認(rèn)使用的Http防火墻,它只是一個(gè)檢查相對(duì)寬松的防火墻。

    HttpFirewall普通模式就是使用DefaultHttpFirewall,該類的校驗(yàn)規(guī)則就要簡(jiǎn)單很多。一般來說,并不建議開發(fā)者在項(xiàng)目中使用DefaultHttpFirewall,因?yàn)橄啾扔赟trictHttp Firewal,DefaultHttpFirewall的安全性要差很多。

    ? StricHttpFirewall 這是一個(gè)檢查嚴(yán)格的Http防火墻,也是框架默認(rèn)使用的 Http防火墻

    嚴(yán)格模式下對(duì)請(qǐng)求做出了諸多限制:

    1) rejectForbiddenHttpMethod:校驗(yàn)請(qǐng)求方法是否合法。

    2)rejectedBlacklistedUrls:校驗(yàn)請(qǐng)求中的非法字符。

    3) rejectedUntrustedHosts:檢驗(yàn)主機(jī)信息。

    4)isNormalized:判斷參數(shù)格式是否合法。

    5)containsOnlyPrintableAsciCharacters: 判斷請(qǐng)求字符是否合法。

    總結(jié)

    Spring Security是一個(gè)安全框架,作為Spring家族的一員,可以簡(jiǎn)單地認(rèn)為 Spring Security是放在用戶和Spring應(yīng)用之間的一個(gè)安全屏障,每一個(gè)web請(qǐng)求都先要經(jīng)過Spring Security 進(jìn)行Authenticate和 Authoration驗(yàn)證,其核心就是一組過濾器鏈。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月22日 06:08
    下一篇 2022年6月22日 06:09

    相關(guān)推薦

    • ios手游模擬器(手游模擬器ios)

      本文主要講的是ios手游模擬器,以及和手游模擬器ios相關(guān)的知識(shí),如果覺得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 哪個(gè)iOS模擬器能多開手游賬號(hào)?可以推薦個(gè)好用的模擬器給我嗎…

      2022年11月27日
    • 30個(gè)無加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

      茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時(shí),門店就人滿為患,消費(fèi)者的購買熱情十分高漲,而由于人流量過大造成擁堵,茶顏悅色也不得不暫停營(yíng)業(yè)。 當(dāng)然,這里面排…

      2022年11月27日
    • 短視頻策劃內(nèi)容的3個(gè)要點(diǎn)(短視頻策劃內(nèi)容怎么做)

      短視頻在制作時(shí),內(nèi)容框架非常重要。如果直奔主題,然后結(jié)束,聚卓告訴你,這樣的短視頻已經(jīng)過時(shí)了?,F(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

      2022年11月27日
    • 美團(tuán)第三季度實(shí)現(xiàn)營(yíng)收626億元,即時(shí)配送訂單量增至50億筆

      新京報(bào)訊(記者秦勝南)11月25日,美團(tuán)發(fā)布業(yè)績(jī)公告顯示,第三季度營(yíng)收為626億元,較去年同比增長(zhǎng)28.2%,凈利潤(rùn)為12.2億元。第三季度,美團(tuán)即時(shí)配送訂單數(shù)增長(zhǎng)至50億筆。截至…

      2022年11月27日
    • 凈利潤(rùn)率越高越好嗎(凈利潤(rùn)率多少合適)

      一、持續(xù)增收不增利,平均凈利潤(rùn)率首次跌入個(gè)位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來看,大部分企業(yè)營(yíng)業(yè)收入呈增長(zhǎng)態(tài)勢(shì),E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤(rùn)增速則明…

      2022年11月26日
    • 游戲平臺(tái)有哪些(游戲平臺(tái)有哪些)

      簡(jiǎn)要回答 游戲平臺(tái)指的是多人通過互聯(lián)網(wǎng)在線游戲的平臺(tái),例如qq游戲,聯(lián)眾世界,浩方電競(jìng)平臺(tái),VS競(jìng)技游戲平臺(tái)等,只要你下載平臺(tái),下載相關(guān)游戲,就能實(shí)現(xiàn)對(duì)戰(zhàn),擺脫了局域網(wǎng)的限制。 詳…

      2022年11月25日
    • 個(gè)人怎么做抖音帶貨(個(gè)人做抖音帶貨能賺錢嗎)

      抖音如今是大家很熟悉的短視頻平臺(tái),不過現(xiàn)在的抖音卻不只是短視頻那么簡(jiǎn)單,它的功能非常豐富,其中一個(gè)就是可以帶貨,相信很多小伙伴都有在抖音上買過東西,抖音如今的變現(xiàn)能力也是不容小覷的…

      2022年11月25日
    • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬億元大市場(chǎng)迎來新規(guī)

      近日,財(cái)政部印發(fā)《關(guān)于進(jìn)一步推動(dòng)政府和社會(huì)資本合作(PPP)規(guī)范發(fā)展、陽光運(yùn)行的通知》,從做好項(xiàng)目前期論證、推動(dòng)項(xiàng)目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險(xiǎn)、保障項(xiàng)目陽光運(yùn)行四個(gè)方面進(jìn)一步規(guī)范P…

      2022年11月25日
    • 小紅書平臺(tái)的一些機(jī)制及玩法詳解(小紅書玩法有哪些)

      關(guān)于小紅書 一:小紅書平臺(tái)的一些機(jī)制 1. 筆記內(nèi)容的CES評(píng)分機(jī)制 2. 筆記流量入口與長(zhǎng)尾效應(yīng) 二:小紅書優(yōu)質(zhì)筆記的特點(diǎn)(分維度、類型分析) 1.筆記的本身架構(gòu)組成 維度 2.…

      2022年11月25日
    • 推薦3種白手起家的賺錢項(xiàng)目(白手起家賺錢項(xiàng)目有哪些)

      如今社會(huì)壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要?jiǎng)?chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個(gè)低成本又賺錢的項(xiàng)目是大多數(shù)人最期望的了,那么有哪些…

      2022年11月25日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息