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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland激活码永久(注册激活)

    (goland激活码永久)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html09LVN3XLKC-eyJsaWNlbnNlSWQi…

    2022年3月28日
    265
  • 机器学习十大算法简介

    机器学习十大算法简介K-Means算法K-Means算法是一种聚类算法,把n个对象根据他们的属性分成k个分类,并且使这K个分割的内部相似度最大,而分割之间的相似度最小。其主要的算法流程如下:1.从n个对象中任意选K个对象,作为每个聚类的中心2.根据K个中心,按照每个对象离K个中心的最小距离(离那个中心近,就划分到哪个中心),将n个对象划分成K个分割(聚类)3.然后计a ge su a分割的中心(

    2025年5月28日
    1
  • 随机梯度下降法概述与实例分析_梯度下降法推导

    随机梯度下降法概述与实例分析_梯度下降法推导机器学习算法中回归算法有很多,例如神经网络回归算法、蚁群回归算法,支持向量机回归算法等,其中也包括本篇文章要讲述的梯度下降算法,本篇文章将主要讲解其基本原理以及基于SparkMLlib进行实例示范,不足之处请多多指教。梯度下降算法包含多种不同的算法,有批量梯度算法,随机梯度算法,折中梯度算法等等。对于随机梯度下降算法而言,它通过不停的判断和选择当前目标下最优的路径,从而能够在最短路径…

    2022年9月10日
    1
  • Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是

    2021年12月28日
    34
  • pig用法_animals

    pig用法_animals1.pig运行模式本地模式:pig-xlocal直接访问本地磁盘集群模式:pig或者pig-xmapreduce2.piglatin交互帮助信息help上传本地文件到

    2022年8月4日
    4
  • 关于计算机病毒的试题,计算机病毒测试题.doc

    关于计算机病毒的试题,计算机病毒测试题.doc计算机病毒1.下列叙述中,正确的一条是______。A、Word文档不会带计算机病毒B、计算机病毒具有自我复制的能力,能迅速扩散到其他程序上C、清除计算机病毒的最简单的办法是删除所有感染了病毒的文件D、计算机杀病毒软件可以查出和清除任何已知或未知的病毒2.下列关于计算机病毒知识的叙述中,正确的一条是______。A、反病毒软件可以查、杀任何种类的病毒B、计算机病毒是一种被破坏了的程序C、…

    2022年6月2日
    29

发表回复

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

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