IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 手撸SSO单点登录(六)SSO单点退出原理 -> 正文阅读

[Java知识库]手撸SSO单点登录(六)SSO单点退出原理

目标

这一章节我们来一起学习,单点退出登录,是怎么让所有sso系统一起退出登录的。
视频详细讲解请见https://www.bilibili.com/video/BV14A4y1S7HP/
源码下载地址:https://gitcode.net/kiduo08/yuantai-sso.git

时序图

在这里插入图片描述

  1. 当用户点击某一个系统的退出登录时候
  2. 统一的发起跳转到认证中心http://authentication.sso.com:8080/logout?redirectUri=http://client.sso.com:8082
  3. 认证中心接受登出请求,注销认证中心登录凭证并清除cookie中的凭证信息。
  4. 携带特定登出参数,向各已登录的应用系统(已获取accessToken)且未过期的应用系统发送http请求,请求注销本地session.
  5. 各应用系统应答处理登出请求。
  6. 认证中心接受各应用系统应答后、跳转回发起登出请求的系统http://client.sso.com:8082/
  7. 应用系统(例如:OA系统)发现本地session已清除或者失效,认证失败发起302重定向
  8. 浏览器(这里重点是浏览器重定向)发起重定向请求http://authentication.sso.com:8080/login?appId=demo1&redirectUri=http://client.sso.com:8082/
  9. 认证中心接受请求判断未登录,返回展示SSO统一登录页面

代码

a. com.yuantai.controller.LogoutControllerlogout方法

@RequestMapping(method = RequestMethod.GET)
    public String logout(
            @RequestParam(value = SsoConstant.REDIRECT_URI, required = true) String redirectUri,
            HttpServletRequest request, HttpServletResponse response) {
        sessionManager.invalidate(request, response);
        return "redirect:" + redirectUri;
    }

调用sessionManager.invalidate(request, response);方法

public void invalidate(HttpServletRequest request, HttpServletResponse response) {
        String tgt = getCookieTgt(request);
        if (StringUtils.isEmpty(tgt)) {
            return;
        }
        // 删除登录凭证
        ticketGrantingTicketManager.remove(tgt);
        // 删除凭证Cookie
        CookieUtils.removeCookie(AppConstant.TGC, "/", response);
        // 删除所有tgt对应的调用凭证,并通知客户端登出注销本地session
        accessTokenManager.remove(tgt);
    }

b.认证中心删除认证嘻嘻

// 删除登录凭证
ticketGrantingTicketManager.remove(tgt);
// 删除凭证Cookie
CookieUtils.removeCookie(AppConstant.TGC, "/", response);

c.接着调用accessTokenManager.remove(tgt);

@Override
    public void remove(String tgt) {
        Set<String> accessTokenSet = tgtMap.remove(tgt);
        if (CollectionUtils.isEmpty(accessTokenSet)) {
            return;
        }
        accessTokenSet.forEach(accessToken -> {
            DummyAccessToken dummyAt = accessTokenMap.get(accessToken);
            if (dummyAt == null || System.currentTimeMillis() > dummyAt.expired) {
                return;
            }
            CodeContent codeContent = dummyAt.accessTokenContent.getCodeContent();
            if (codeContent == null || !codeContent.isSendLogoutRequest()) {
                return;
            }
            logger.debug("发起客户端登出请求, accessToken:{}, url:{}", accessToken, codeContent.getRedirectUri());
            sendLogoutRequest(codeContent.getRedirectUri(), accessToken);
        });
    }

这里循环调用获取accessToken时候存下来的应用系统信息。
d.最后发起重定向,走第一次打开系统页面的流程。

总结

SSO单点系统登录的原理,及其重要,系统小伙伴一定要认真的看我的视频,了解原理。
今天发生了一件事情想想赶紧把sso单点登录搞完,啥事情呢?BPM系统开发小伙伴调用别人提供的接口,验证接口不通一直403(一天多没有搞定),但是postman可以调用,领导让我把把脉,我看了接口文档(SAP开发CPI的人提供的接口信息),自己写了接口调用排查了一下确实403,然后postman试了试可以通(这说明什么postman自动记录了一些信息,那就只能是cookie里的session信息),果然发现接口网关需要cookie里的JESSIONID信息(他们一直传了登录Basic auth认证返回的token)、我告诉了他们这个类似SSO单点登录通过session认证信息(就是目前我讲的手撸SSO单点登录基于httpSession)可能是他们(SAP)类似网关需要session信息,cpi提供的接口系统只需要token验证信息。然后他们一会搞定,我瞬间在领导的心目中又提升了地位。哈哈哈!!!! 原理!原理!原理!这样在遇到问题时能够迅速的排除问题。大家慢慢积累吧又肝到了很晚

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 11:43:27  更:2022-05-10 11:43:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:47:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码