亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一個(gè)注解搞定Spring Security基于Oauth2的SSO單點(diǎn)登錄功能

 更新時(shí)間:2021年09月28日 09:00:26   作者:zlt2000  
本文主要介紹 同域 和 跨域 兩種不同場(chǎng)景單點(diǎn)登錄的實(shí)現(xiàn)原理,并使用 Spring Security 來(lái)實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的跨域 SSO客戶(hù)端。對(duì)Spring Security基于Oauth2的SSO單點(diǎn)登錄功能感興趣的朋友一起看看吧

一、說(shuō)明

單點(diǎn)登錄顧名思義就是在多個(gè)應(yīng)用系統(tǒng)中,只需要登錄一次,就可以訪(fǎng)問(wèn)其他相互信任的應(yīng)用系統(tǒng),免除多次登錄的煩惱。本文主要介紹 同域跨域 兩種不同場(chǎng)景單點(diǎn)登錄的實(shí)現(xiàn)原理,并使用 Spring Security 來(lái)實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的跨域 SSO客戶(hù)端

二、原理說(shuō)明

單點(diǎn)登錄主流都是基于共享 cookie 來(lái)實(shí)現(xiàn)的,下面分別介紹 同域跨域 下的兩種場(chǎng)景具體怎樣實(shí)現(xiàn)共享 cookie

2.1. 同域單點(diǎn)登錄

適用場(chǎng)景:都是企業(yè)自己的系統(tǒng),所有系統(tǒng)都使用同一個(gè)一級(jí)域名通過(guò)不同的二級(jí)域名來(lái)區(qū)分。

舉個(gè)例子:公司有一個(gè)一級(jí)域名為 zlt.com ,我們有三個(gè)系統(tǒng)分別是:門(mén)戶(hù)系統(tǒng)(sso.zlt.com)、應(yīng)用1(app1.zlt.com)和應(yīng)用2(app2.zlt.com),需要實(shí)現(xiàn)系統(tǒng)之間的單點(diǎn)登錄,實(shí)現(xiàn)架構(gòu)如下:

核心原理:

  • 門(mén)戶(hù)系統(tǒng)設(shè)置 Cookiedomain 為一級(jí)域名也就是 zlt.com,這樣就可以共享門(mén)戶(hù)的 Cookie 給所有的使用該域名(xxx.zlt.com)的系統(tǒng)
  • 使用 Spring Session 等技術(shù)讓所有系統(tǒng)共享 Session
  • 這樣只要門(mén)戶(hù)系統(tǒng)登錄之后無(wú)論跳轉(zhuǎn)應(yīng)用1或者應(yīng)用2,都能通過(guò)門(mén)戶(hù) Cookie 中的 sessionId 讀取到 Session 中的登錄信息實(shí)現(xiàn)單點(diǎn)登錄

2.2. 跨域單點(diǎn)登錄

單點(diǎn)登錄之間的系統(tǒng)域名不一樣,例如第三方系統(tǒng)。由于域名不一樣不能共享 Cookie 了,這樣就需要通過(guò)一個(gè)單獨(dú)的授權(quán)服務(wù)(UAA)來(lái)做統(tǒng)一登錄,并基于共享UAA的 Cookie 來(lái)實(shí)現(xiàn)單點(diǎn)登錄。

舉個(gè)例子:有兩個(gè)系統(tǒng)分別是:應(yīng)用1(webApp.com)和應(yīng)用2(zlt.com)需要實(shí)現(xiàn)單點(diǎn)登錄,另外有一個(gè)UAA授權(quán)中心(sso.com),實(shí)現(xiàn)架構(gòu)如下:

核心原理:

  • 訪(fǎng)問(wèn)系統(tǒng)1判斷未登錄,則跳轉(zhuǎn)到UAA系統(tǒng)請(qǐng)求授權(quán)
  • 在UAA系統(tǒng)域名 sso.com 下的登錄地址中輸入用戶(hù)名/密碼完成
  • 登錄登錄成功后UAA系統(tǒng)把登錄信息保存到 Session 中,并在瀏覽器寫(xiě)入域?yàn)?sso.comCookie
  • 訪(fǎng)問(wèn)系統(tǒng)2判斷未登錄,則跳轉(zhuǎn)到UAA系統(tǒng)請(qǐng)求授權(quán)
  • 由于是跳轉(zhuǎn)到UAA系統(tǒng)的域名 sso.com 下,所以能通過(guò)瀏覽器中UAA的 Cookie 讀取到 Session 中之前的登錄信息完成單點(diǎn)登錄

2.3. 基于Oauth2的跨域單點(diǎn)登錄流程

關(guān)于Oauth2的授權(quán)碼模式這里就不做介紹了,自行找資料了解

三、Spring Security實(shí)現(xiàn)

Oauth2單點(diǎn)登錄除了需要授權(quán)中心完成統(tǒng)一登錄/授權(quán)邏輯之外

基于 Spring Security 實(shí)現(xiàn)的UUA統(tǒng)一授權(quán)中心可以參考:https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-uaa

各個(gè)系統(tǒng)本身(sso客戶(hù)端)也需要實(shí)現(xiàn)以下邏輯:

  • 攔截請(qǐng)求判斷登錄狀態(tài)
  • UAA授權(quán)中心 通過(guò) Oauth2授權(quán)碼模式 交互完成登錄/單點(diǎn)登錄
  • 保存用戶(hù)登錄信息

以上邏輯只需使用一個(gè) @EnableOAuth2Sso 注解即可實(shí)現(xiàn)

SpringBoot配置如下:

下圖是訪(fǎng)問(wèn) sso客戶(hù)端 時(shí) @EnableOAuth2Sso 注解與 UAA授權(quán)中心 通過(guò) Oauth2授權(quán)碼模式 交互完成單點(diǎn)登錄的步驟

請(qǐng)結(jié)合上面單點(diǎn)時(shí)序圖中單點(diǎn)登錄系統(tǒng)2的1~5步

PS:如果系統(tǒng)用的不是 Spring Security 怎么辦?理解原理自行實(shí)現(xiàn)

四、demo下載地址

https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo

到此這篇關(guān)于一個(gè)注解搞定Spring Security基于Oauth2的SSO單點(diǎn)登錄功能的文章就介紹到這了,更多相關(guān)Spring Security 單點(diǎn)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot內(nèi)置數(shù)據(jù)源的持久化與解決方案

    SpringBoot內(nèi)置數(shù)據(jù)源的持久化與解決方案

    數(shù)據(jù)源的配置 我們先基于SpringBoot默認(rèn)的HikariDataSource數(shù)據(jù)源,導(dǎo)入JDBC場(chǎng)景,看看SpringBoot幫我們自動(dòng)配置了什么,下面我們來(lái)了解SpringBoot內(nèi)置數(shù)據(jù)源持久化
    2022-07-07
  • Java如何自定義異常打印非堆棧信息詳解

    Java如何自定義異常打印非堆棧信息詳解

    這篇文章主要給大家介紹了關(guān)于Java如何自定義異常打印非堆棧信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • jstorm源碼解析之bolt異常處理方法

    jstorm源碼解析之bolt異常處理方法

    下面小編就為大家?guī)?lái)一篇jstorm源碼解析之bolt異常處理方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 淺析JVM的垃圾回收器

    淺析JVM的垃圾回收器

    這篇文章主要介紹了JVM垃圾回收器的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java虛擬機(jī)的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11
  • Java實(shí)現(xiàn)班級(jí)管理系統(tǒng)

    Java實(shí)現(xiàn)班級(jí)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)班級(jí)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 深入剖析java中的集合框架

    深入剖析java中的集合框架

    下面小編就為大家?guī)?lái)一篇深入剖析java中的集合框架。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-05-05
  • Java中LinkedHashSet的底層機(jī)制詳解

    Java中LinkedHashSet的底層機(jī)制詳解

    這篇文章主要介紹了Java中LinkedHashSet的底層機(jī)制解讀,   LinkedHashSet是具有可預(yù)知迭代順序的Set接口的哈希表和鏈接列表實(shí)現(xiàn),此實(shí)現(xiàn)與HashSet的不同之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表,需要的朋友可以參考下
    2023-09-09
  • Springboot整合Swagger3全注解配置(springdoc-openapi-ui)

    Springboot整合Swagger3全注解配置(springdoc-openapi-ui)

    本文主要介紹了Springboot整合Swagger3全注解配置(springdoc-openapi-ui),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java集合功能與用法實(shí)例詳解

    Java集合功能與用法實(shí)例詳解

    這篇文章主要介紹了Java集合功能與用法,結(jié)合實(shí)例形式詳細(xì)分析了java集合的基本概念、功能、原理、操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • 詳解Java如何利用反射提高代碼的靈活性

    詳解Java如何利用反射提高代碼的靈活性

    反射是Java語(yǔ)言的一種特性,它允許程序在運(yùn)行時(shí)動(dòng)態(tài)地獲取類(lèi)的信息并操作類(lèi)的屬性、方法和構(gòu)造函數(shù),使得我們的代碼更加靈活和可擴(kuò)展,下面就來(lái)看看Java中反射機(jī)制的具體操作吧
    2023-05-05

最新評(píng)論