【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【20】認證服務04—SSO單點登錄


持續學習&持續更新中…

守破離


【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【20】認證服務04—SSO單點登錄

  • xxl-sso
  • 多系統-單點登錄
  • 單點登錄流程原理圖
  • 單點登錄流程簡單實現
  • 參考

xxl-sso

https://gitee.com/xuxueli0323/xxl-sso
xxl-sso是開源的一個單點登錄框架
一個分布式單點登錄框架。只需要登錄一次就可以訪問所有相互信任的應用系統。 擁有"輕量級、分布式、跨域、Cookie+Token均支持、Web+APP均支持"等特性;。現已開放源代碼,開箱即用。

C:\Windows\System32\drivers\etc\hosts(模仿三個域名)

#模擬單點登錄
127.0.0.1 xxlssoserver.com
127.0.0.1 client1.com
127.0.0.1 client2.com

打包之前修改這三個的配置文件:

在這里插入圖片描述

舉例:修改客戶端:

在這里插入圖片描述

修改完成打包命令:(打包所有)

在這里插入圖片描述

啟動服務器
在這里插入圖片描述

啟動兩個客戶端:

在這里插入圖片描述

在這里插入圖片描述


自己測試:

C:\Users\lenovo\Desktop\xxl-sso\xxl-sso-server\target>java -jar xxl-sso-server-1.1.1-SNAPSHOT.jar
C:\Users\lenovo\Desktop\xxl-sso\xxl-sso-samples\xxl-sso-web-sample-springboot\target>java -jar xxl-sso-web-sample-springboot-1.1.1-SNAPSHOT.jar --server.port=13000
C:\Users\lenovo\Desktop\xxl-sso\xxl-sso-samples\xxl-sso-web-sample-springboot\target>java -jar xxl-sso-web-sample-springboot-1.1.1-SNAPSHOT.jar --server.port=12000

http://xxlssoserver.com:8080/xxl-sso-server/login
http://client1.com:12000/xxl-sso-web-sample-springboot/
http://client2.com:13000/xxl-sso-web-sample-springboot/

上面這三個地址,無論訪問哪個都要求登錄,并且一處登錄,處處可用

多系統-單點登錄

Single Sign On 一處登陸、處處可用(運行)

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

單點登錄流程原理圖

在這里插入圖片描述

單點登錄流程簡單實現

認證服務:ssoserver.com:8080

@Controller
public class LoginController {@AutowiredStringRedisTemplate redisTemplate;/*** TODO 開放接口給其他系統,讓它們用來查詢 token 對應的用戶信息,判斷該用戶是否登錄過,實現單點登錄*/@ResponseBody@GetMapping("/userInfo")public String userInfo(@RequestParam("token") String token){String s = redisTemplate.opsForValue().get(token);return s;}@GetMapping("/login.html")public String loginPage(@RequestParam("redirect_url") String url, Model model,@CookieValue(value = "sso_token",required = false) String sso_token){if(!StringUtils.isEmpty(sso_token)){//說明之前有人登錄過,瀏覽器留下了痕跡return "redirect:"+url+"?token="+sso_token;}model.addAttribute("url",url);return "login";}@PostMapping("/doLogin")public String doLogin(@RequestParam("username") String username,@RequestParam("password")String password,@RequestParam("url")String url,HttpServletResponse response){// 假設用戶名密碼不為空就登錄成功if(!StringUtils.isEmpty(username) && !StringUtils.isEmpty(password)){//把登錄成功的用戶存起來。String uuid = UUID.randomUUID().toString().replace("-","");redisTemplate.opsForValue().set(uuid,username);// 給瀏覽器留下登錄痕跡Cookie sso_token = new Cookie("sso_token",uuid);response.addCookie(sso_token);//登錄成功,跳回之前頁面,并帶上tokenreturn "redirect:"+url+"?token="+uuid;}//登錄失敗,展示登錄頁return "login";}
}

客戶端1:client1.com:8081

@Controller
public class HelloController {@Value("${sso.server.url}")String ssoServerUrl;/*** 無需登錄就可訪問* @return*/@ResponseBody@GetMapping("/hello")public String hello(){return "hello";}/*** TODO 如下判斷,可以抽取出來放在一個Filter中,放在任何系統中,實現單點登錄*//*** 感知這次是在 ssoserver 登錄成功跳回來的。* @param model* @param session* @param token 只要去ssoserver登錄成功跳回來就會帶上* @return*/@GetMapping("/employees")public String employees(Model model, HttpSession session,@RequestParam(value = "token",required = false) String token){//if(!StringUtils.isEmpty(token)){//TODO 應該去ssoserver獲取當前token真正對應的用戶信息// 如果我們并不知道ssoserver的redis地址,也就是說客戶端并不知道認證服務器將用戶信息保存在哪里// 我們就得用令牌去認證服務器再查一次用戶信息,查詢用戶信息成功,表明登錄成功RestTemplate restTemplate = new RestTemplate();ResponseEntity<String> forEntity = restTemplate.getForEntity("http://ssoserver.com:8080/userInfo?token=" + token, String.class);String body = forEntity.getBody();session.setAttribute("loginUser",body);}Object loginUser = session.getAttribute("loginUser");if(loginUser==null){//沒登錄,跳轉到登錄服務器進行登錄//跳轉過去以后,使用url上的查詢參數標識我們自己是哪個頁面//redirect_url=http://client1.com:8080/employeesreturn "redirect:"+ssoServerUrl+"?redirect_url=http://client1.com:8081/employees";}else{List<String> emps = new ArrayList<>();emps.add("張三");emps.add("李四");model.addAttribute("emps",emps);return "list";}}
}

客戶端2:client1.com:8082

@Controller
public class HelloController {@Value("${sso.server.url}")String ssoServerUrl;@GetMapping("/boss")public String boss(Model model, HttpSession session,@RequestParam(value = "token",required = false) String token){if(!StringUtils.isEmpty(token)){RestTemplate restTemplate = new RestTemplate();ResponseEntity<String> forEntity =restTemplate.getForEntity("http://ssoserver.com:8080/userInfo?token=" + token, String.class);String body = forEntity.getBody();session.setAttribute("loginUser",body);}Object loginUser = session.getAttribute("loginUser");if(loginUser==null){return "redirect:"+ssoServerUrl+"?redirect_url=http://client2.com:8082/boss";}else{List<String> boss = new ArrayList<>();boss.add("666");boss.add("777");model.addAttribute("boss",boss);return "list";}}}

參考

雷豐陽: Java項目《谷粒商城》Java架構師 | 微服務 | 大型電商項目.


本文完,感謝您的關注支持!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40461.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧交通運行監測與應急指揮中心方案

建設目標 建立感知層數據的實時采集以及數據處理&#xff0c;實現監測預警自動化和智能化&#xff1b;推動交通運輸數據資源開放共享&#xff0c;打破數據資源壁壘&#xff0c;與城市各部門數據建立共享交換機制&#xff0c;實現應急指揮的協同化&#xff1b;充分運用大數據、互…

【免費資料】IEEE33節點系統參數及拓撲圖visio

主要內容 對于初學配電網的同學&#xff0c;最經典的系統即是33節點配電網系統&#xff0c;在各個研究文獻中出現頻次最高的也是這個系統&#xff0c;為了讓大家更好了解33節點系統參數&#xff0c;本次整理了系統節點、支路參數excel以及33節點網絡拓撲圖visio&#xff0c…

阿里云安裝rabbitMQ

1、首先看linux 版本 uname -a如果時centos 7 可以參考其他文檔。我這里是centos 8 這個很重要 。網上全是按centos7 按照。導致我前面一直安裝不上 各種問題。 2、查看rabbitmq 對應 erl 的版本下載 https://www.rabbitmq.com/docs/which-erlang 選擇rabbitmq 3.11.19 選擇…

人大金倉KADB監控工具及問題處理

目錄 1. Kmonitor拆包安裝部署. 3 1.1.環境準備. 3 1.2.拷貝并解壓. 4 1.3.kadb_exporter 4 1.3.1 修改application.yml文件. 4 1.3.2 修改連接池. 5 1.3.3 修改啟動文件(可選) 6 1.4.H2庫. 7 1.4.1進入h2db并修改啟動文件(可選) 7 1.4.2 打開h2庫網址并連接. 8 1.…

國家力推!國家人工智能產業標準化指南

在科技日新月異的今天&#xff0c;人工智能&#xff08;AI&#xff09;作為推動社會進步和產業升級的關鍵力量&#xff0c;正以前所未有的速度改變著我們的世界。從自動駕駛到智能制造&#xff0c;從智慧醫療到金融科技&#xff0c;人工智能的觸角已經深入到了經濟社會的各個角…

ElementUI的中國省市區級聯數據插件element-china-area-data

安裝 npm install element-china-area-data -S import 使用 import {provinceAndCityData,pcTextArr,regionData,pcaTextArr,codeToText, } from "element-china-area-data"; provinceAndCityData省市二級聯動數據,漢字+coderegionData省市區三級聯動數據pcTextAr…

合合信息大模型“加速器”亮相2024世界人工智能大會,助力大模型學好“專業課”

7月4日至7日&#xff0c;2024世界人工智能大會在上海拉開帷幕。現階段&#xff0c;“百模大戰”現象背后的中國大模型發展前景與堵點仍然是各界關注的焦點。如何幫助大模型在信息的海洋中快速找準航向&#xff0c;在數據的荒漠中找到高質量的“水源”&#xff1f;合合信息在本次…

多個comfyui之間如何共享模型,節省存儲空間

COMFYUI 模型共享插件教程 一、COMFYUI 模型共享插件教程1.1 插件特性1.2 插件介紹1.3 鏈接 二、詳細配置步驟2.1 開啟開發者選項2.2 放置插件文件2.3 放置配置文件2.4 編輯配置文件2.4.1 其他配置項 三、啟動COMFYUI并驗證3.1 啟動COMFYUI3.2 驗證模型共享3.3 多整合包共享配置…

CTF之unseping

拿到題目看不懂&#xff1f;這是難度1&#xff1f;含淚去看大佬的wp&#xff0c;寫下我的自傳&#xff01; <?php highlig…

云倉酒莊天津分公司:深化業務常態化運營

標題&#xff1a;云倉酒莊天津分公司&#xff1a;深化業務常態化運營&#xff0c;以沙龍為紐帶&#xff0c;構建價值疊加的酒業新生態 在當今復雜多變的經濟環境中&#xff0c;傳統酒業面臨著前所未有的挑戰與機遇。隨著數字化轉型的加速和消費者偏好的日益多元化&#xff0c;…

一鍵直達:2024最新Win10系統安裝包!快來下載!

對于想體驗Win10系統最新功能的用戶來說&#xff0c;尋找可靠的最新系統安裝包是特別重要的。接下來系統之家小編就給大家帶來2024年最新Win10系統安裝包&#xff0c;有需要的小伙伴一鍵點擊就能開始下載。該系統安裝步驟簡單易懂&#xff0c;無需擔心任何裝機經驗。 推薦下載&…

react_web自定義組件_多類型Modal_搜索欄Search

目錄 一、帶輸入框的Modal 二、提示框Modal 三、搜索欄Search 在做項目時引入一些現成的UI組件&#xff0c;但是如果和設計圖沖突太大&#xff0c;更改時很麻煩&#xff0c;如果自己寫一個通用組件其實也就幾十分鐘或者幾個小時&#xff0c;而且更具UI設計更改也比較好更改&…

【Linux進程】進程優先級 Linux 2.6內核進程的調度

前言 進程是資源分配的基本單位, 在OS中存在這很多的進程, 那么就必然存在著資源競爭的問題, 操作系統是如何進行資源分配的? 對于多個進程同時運行, 操作系統又是如何調度達到并發呢? 本文將以Linux kernel 2.6為例 , 向大家介紹進程在操作系統中 (OS) 的調度原理; 1. 進程優…

【網絡安全】第7講 計算機病毒概述(筆記)

一、計算機病毒的簡介 1、名稱的由來 由生物醫學上的 “病毒” 一詞借用而來。 &#xff08;1&#xff09;與生物醫學上“病毒”的異同 同&#xff1a;都具有傳染性、流行性、針對性等。異&#xff1a;不是天生的&#xff0c;而是人為編制的具有特殊功能的程序。 2、病毒的起…

免費代理 IP 如何泄露您的個人信息?

互聯網時代&#xff0c;信息安全和隱私保護成為人們關注的焦點。很多用戶出于各種需要&#xff0c;使用代理服務器瀏覽網頁或進行其他網絡活動&#xff0c;其中免費代理IP因其免費的特點而受到廣泛青睞。然而&#xff0c;免費代理IP并不總是一個安全可靠的選擇&#xff0c;它們…

process.env 管理 Vue 項目的環境變量(Vue項目中環境變量的配置及調用)

簡述&#xff1a;在構建 Vue 應用時&#xff0c;管理配置是開發中的一個重要部分。不同的環境&#xff08;如開發、測試和生產&#xff09;往往需要不同的配置&#xff0c;例如 API、 基礎 URL、第三方服務的密鑰等。使用環境變量可以幫助我們更好地管理這些配置。這里將介紹如…

每天10個js面試題(二)

1.事件輪詢&#xff1f; JavaScript 是單線程的&#xff0c;同一時間只能做一件事。所有任務都需要排隊&#xff0c;前一個任務結束&#xff0c;才會執行后一個任務&#xff0c;為了保證任務有序的執行&#xff0c;事件輪詢就是單線程任務調度的一種方式&#xff0c;單線程任務…

1014-01SF 同軸連接器

型號簡介 1014-01SF是Southwest Microwave的一款2.92 mm 同軸連接器。這款連接器外殼采用鋼CRES 合金 UNS S30300&#xff0c;觸點采用鈹銅 (BeCu)&#xff0c;UNS C17300&#xff0c;并經過金鍍處理&#xff0c;以確保良好的導電性和耐腐蝕性。適用于高頻微波應用&#xff0c;…

如何設計通用用戶、權限、菜單數據表

在設計一個通用的用戶、權限和菜單管理系統時&#xff0c;我們通常需要創建幾個核心的數據庫表來管理用戶信息、角色信息、權限信息以及菜單信息。下面是一個基于SQL的示例&#xff0c;展示了如何建立這些基礎表格。 數據庫表設計 1. 用戶表 (users) Sql 1CREATE TABLE user…

從 0 到 1 安裝運行 Qwen2

環境信息&#xff1a; PyTorch 2.0.0 Python 3.8(ubuntu20.04) Cuda 11.8 RTX 3090(24GB) * 1 模型 /home/zhangwei/llm 源碼 /usr/local/project/conda/Qwen/Qwen mkdir -p /usr/local/project/conda/Qwen #【用來存放Qwen2源碼】 mkdir -p /home/zhangwei/llm #【用來存放Q…