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


相关推荐

  • CEGUI渲染概论

    CEGUI渲染概论
    1、几个重要的类
    Direct3D9Renderer负责CEGUI的Render的接口
    RenderingSurface渲染接口类
    RenderingWindow可渲染窗口
    RenderTarget的继承关系相关类。
    Direct3D9GeometryBuffer类
    其方法
     voiddraw()const;//渲染
       voidsetTranslation(constVector3&t);

    2022年7月23日
    20
  • ps基础快捷键_ps确定的快捷键

    ps基础快捷键_ps确定的快捷键ps快捷键常用表,ps快捷键大全!天下武功,唯快不破!看完这篇PS快捷键使用指南,帮你掌握最常用的32个Photoshop快捷键!注:左上为Mac快捷键,右上为PC快捷键1、Command+T:自由变形该快捷键,主要对图层进行旋转、缩放等变形调整,同时可以拖动修改图层在画面中的位置,是极为常用的功能键。2、Command+J:复制图层对图层的复制,一般的操作是通过图层菜单栏选择,或者…

    2022年9月29日
    2
  • NFS(网络文件系统)简介及搭建

    NFS(网络文件系统)简介及搭建

    2021年6月2日
    111
  • 小白教程!!!win10如何安装Windows和Linux双系统??

    小白教程!!!win10如何安装Windows和Linux双系统??最近升级了win10装了一块固态硬盘,决定装一个双系统玩玩,正好公司运维大哥没事干,在他的帮助下,加上上网看了看发现关于win10的双系统双硬盘安装教程大都语焉不详,要么就是从别处复制粘贴的,这里发一个我的安装步骤如下:一:去官网下载Ubuntu系统 地址:https://www.ubuntu.com/download/desktop问题来了,去哪里下载一个linux系统呢?很简单,去官…

    2022年7月24日
    5
  • CANoe的使用

    CANoe的使用CANoe 是德国 Vector 公司为汽车总线的开发而设计的一款总线开发环境 全称叫 CANopenenvir CANoe 集合了网络监控 数据获取 记录 节点仿真 诊断 自动测试等功能 其丰富的功能和配置选项使其也是常见于汽车电子行业 接下来 我们以 9 0 版本为例 针对 CANoe 的常用操作进行介绍 1CANoe 工程新建打开 CANoe 软件 在工具栏的 File 中点击 New 双击选择创建的模板 再保存创建的 cfg 工程文件 2 通过 Trace 工具

    2025年10月10日
    0
  • 手把手教你做一个安卓点餐系统

    手把手教你做一个安卓点餐系统撸一个安卓系统……

    2022年6月19日
    33

发表回复

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

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