【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【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.mzph.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;人工智能的触角已经深入到了经济社会的各个角…

合合信息大模型“加速器”亮相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、第三方服务的密钥等。使用环境变量可以帮助我们更好地管理这些配置。这里将介绍如…

1014-01SF 同轴连接器

型号简介 1014-01SF是Southwest Microwave的一款2.92 mm 同轴连接器。这款连接器外壳采用钢CRES 合金 UNS S30300&#xff0c;触点采用铍铜 (BeCu)&#xff0c;UNS C17300&#xff0c;并经过金镀处理&#xff0c;以确保良好的导电性和耐腐蚀性。适用于高频微波应用&#xff0c;…

机器人典型的交互任务、阻抗控制的示意图、内涵、意义、存在的交互控制科学问题

机器人典型的交互任务 机器人在实际应用中经常需要完成与环境的交互任务&#xff0c;这些任务包括但不限于&#xff1a; 装配任务&#xff1a;在制造业中&#xff0c;机器人需要准确地操控和组装各种零部件&#xff0c;包括不同形状、大小和材质的物体。搬运任务&#xff1a;…

科普文:一文搞懂nginx原理和实战

1. Nginx简介与核心架构 1.1 Nginx简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 邮件代理服务器。 由 Igor Sysoev 于2004年首次发布&#xff0c;其设计目标是解决 C10K 问题&#xff0c;即在一台服务器上同时处理一万个并…

The Sandbox 人物化身每月奖励: 七月版来了!

人物化身的持有者可以从 The Sandbox 领取自己的队服&#xff01; 视频&#xff1a;https://youtu.be/tSo5FPL7DhE 我们又推出了人物化身所有者月度奖励&#xff01;在七月&#xff0c;我们将通过 The Sandbox 队服来弘扬体育竞技精神。穿上这些时尚的元宇宙队服&#xff0c;代…

单机多网卡互通——问题跟踪+工具分析

一、背景 想搭建soft ROCE(RXE)与实体ROCE设备互联的测试环境&#xff0c;为了节省机器以及使用方便&#xff0c;预想在配备ROCE卡的主机上&#xff0c;用另一个网卡绑定soft ROCE&#xff0c;然后互通。 [ETH1 ROCE] <--------------------> [ETH2 RXE] 二、问题跟…