SSO单点登录简单实现

SSO单点登录简单实现通过 cookie 来实现单点登录 1 单点登录的流程 cookie 是用来在客户端存储数据的工具 在其中一个子系统登录 跳转到登录系统 登陆系统登陆完成 完成登录后会向发起登录的子系统写入一个 cookie 保存用于认证用户是否登录的信息 token 其他子系统向服务器发起请求的时候 携带这个 cookie 完成登录 cookie 的域要是所有子系统相同的域 这样所有子系统才能访问到这个 cookie 2 单点登录流程图 2 单点登录的编码 部分核心代码 代码链接 https gitee com yueh

通过cookie来实现单点登录

1.单点登录的流程

2.单点登录流程图

在这里插入图片描述

2.单点登录的编码(部分核心代码)

代码链接:https://gitee.com/yuehewei/sso-single-sign-on

@Controller @RequestMapping("/login") public class LoginController { //模拟数据库数据 private static Set<User> dbUsers; static { dbUsers=new HashSet<>(); dbUsers.add(new User(0,"yuehwi","")); dbUsers.add(new User(1,"yueei1","")); dbUsers.add(new User(2,"yueei2","12345")); dbUsers.add(new User(3,"yueei3","1234")); dbUsers.add(new User(4,"yueh4","123")); } @PostMapping public String doLogin(User user, HttpSession session, HttpServletResponse response){ Object target = session.getAttribute("target"); //判读这个用户是否存在 Optional<User> user1 = dbUsers.stream().filter(dbUsers -> dbUsers.getUsername().equals(user.getUsername()) && dbUsers.getPassword().equals(user.getPassword()) ).findFirst(); /* * 1.当这个用户存在,我们需要给他生成一个随机的uuid作为token * 2.并把token作为key,user作为value,存在缓存中 * 3.并把token交割cookie,并设置该cookie可跨域的域名 * 4.将cookie返还给客户端 */ if (user1.isPresent()){ String token = UUID.randomUUID().toString(); LoginCacheUtil.loginMap.put(token,user1.get()); Cookie cookie = new Cookie("TOKEN",token); //跨域共享cookie的方法:setDomain() cookie.setDomain("codeshop.com"); response.addCookie(cookie); }else { session.setAttribute("msg","用户名或者密码错误"); return "login"; } return "redirect:"+target; } @GetMapping("info") @ResponseBody /* *功能描述 * 得到token,并在缓存中找到key=token的用户并返回 */ public ResponseEntity<User> getUserInfo(String token){ if (!StringUtils.isEmpty(token)){ User user = LoginCacheUtil.loginMap.get(token); return ResponseEntity.ok(user); }else { return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST); } } } 
@Controller @RequestMapping("view") public class ViewController { @Autowired //RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版 RestTemplate restTemplate; private final String LOGIN_INFO="http://login.codeshop.com:9000/login/info?token="; @GetMapping ("index") public String toIndex(@CookieValue(required = false,value = "TOKEN") Cookie cookie, HttpSession session){ //判断用户是否登陆过,RestTemplate 发送的是Http请求,getForObject 的返回值就是服务提供者返回的数据,使用getForObject 无法获取到响应头 if ( cookie!=null){ String token = cookie.getValue(); if (!StringUtils.isEmpty(token)){ Map user = restTemplate.getForObject(LOGIN_INFO +token, Map.class); session.setAttribute("loginUser",user); } } return "index"; } } 

参考视频链接:https://space.bilibili.com/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233268.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月2日 下午5:01
下一篇 2025年8月2日 下午5:22


相关推荐

  • matlab函数输出语句,matlab两种输出语句分别是什么

    matlab函数输出语句,matlab两种输出语句分别是什么matlab 两种输出语句分别是什么发布时间 2021 02 2614 21 27 来源 亿速云阅读 79 作者 小新这篇文章主要介绍了 matlab 两种输出语句分别是什么 具有一定借鉴价值 感兴趣的朋友可以参考下 希望大家阅读完这篇文章之后大有收获 下面让小编带着大家一起了解一下 matlab 输出语句有两种 分别是 1 自由格式 语法如 disp 23 454 29 4 2 格式化输出 语法如 f

    2026年3月17日
    3
  • Maven使用阿里云镜像

    Maven使用阿里云镜像setting xml mirrors mirror id alimaven id name aliyunmaven name url http maven aliyun com nexus content groups public lt url mirror mirrors

    2026年3月20日
    2
  • 深入理解Spring两大特性:IoC和AOP

    深入理解Spring两大特性:IoC和AOPJavaEE 目录 https blog csdn net dkbnull article details nbsp 众所周知 Spring 拥有两大特性 IoC 和 AOP IoC 英文全称 InversionofC 意为控制反转 AOP 英文全称 Aspect OrientedProg 意为面向切面编程 Spring 核心容器的主要组件是 Bean 工

    2026年3月19日
    2
  • Nginx(四):Nginx配置实战

    Nginx(四):Nginx配置实战

    2021年10月5日
    59
  • 为什么你学不会递归?告别递归,谈谈我的经验[通俗易懂]

    为什么你学不会递归?告别递归,谈谈我的经验[通俗易懂]可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了!可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不知道怎么使用,有时候还容易被递归给搞晕。也有好几个人来问我有没有快速掌握递归的捷径啊。说实话,哪来那么多捷径啊,不过,我还是想写一篇文章,谈谈我的一些经验,或许,能够给你带来一些帮助…

    2025年11月1日
    5
  • Maven配置及IDEA中配置Maven详解

    Maven配置及IDEA中配置Maven详解1、Maven安装配置首先到官网下载http://maven.apache.org/download.cgi 我们需要下载的bin.zip结尾的文件,下载后解压到指定文件夹(全英文路径) 配置环境变量确保JAVA环境变量已经配置好了。添加M2_HOME和MAVEN_HOME环境变量到Windows环境变量。 PATH变量添加%M2_HOME%\bin修…

    2022年5月11日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号