spring security oauth2 sso退出

2023-05-16

一、客户端退出调用认证中心/logout服务

这种方式是客户端先退出,然后再退出认证中心。

方法1:集成WebSecurityConfigurerAdapter,重写方法如下(推荐这种方式,退出干净简单)

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.logout().logoutSuccessUrl("认证中心/logout服务地址");
}

方法2:提供服务,先清除本地登录信息,再重定向到认证中心/logout服务

@GetMapping("/api/logout")
public String doLogout(HttpServletRequest request, HttpServletResponse response) {
	Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
	if (authentication != null) {//清除认证
		new SecurityContextLogoutHandler().logout(request, response, authentication);
	}	
	// 请求认证中心/logout
	return "redirect:认证中心地址/logout?" + request.getQueryString();
}

二、认证中心退出

方式1、仿写TokenEndpoint使token失效

@FrameworkEndpoint
public class RevokeTokenEndpoint {

    @Autowired
    @Qualifier("consumerTokenServices")
    ConsumerTokenServices consumerTokenServices;

    @RequestMapping(method = RequestMethod.DELETE, value = "/oauth/token")
    @ResponseBody
    public String revokeToken(String access_token) {
        if (consumerTokenServices.revokeToken(access_token)){
            return "注销成功";
        }else{
            return "注销失败";
        }
    }
}

方式2、通过tokenStore清除token

@Autowired
private TokenStore tokenStore;

/**
* 移除access_token和refresh_token
*
* @param access_token
*/
@DeleteMapping(value = "/remove_token", params = "access_token")
public void removeToken(Principal principal, String access_token) {
	OAuth2AccessToken accessToken = tokenStore.readAccessToken(access_token);
	if (accessToken != null) {
		// 移除access_token
		tokenStore.removeAccessToken(accessToken);

		// 移除refresh_token
		if (accessToken.getRefreshToken() != null) {
			tokenStore.removeRefreshToken(accessToken.getRefreshToken());
		}
	}
}

以上退出方式,不能实现多个客户端同时退出。

多个客户端同时退出思路,如下图,根据令牌获取到要退出的用户,再根据用户查找在所有注册系统中的令牌,依次调用注册系统本地的销毁会话和令牌的服务:

参考:

https://www.optbbs.com/thread-15966558-1-1.html

https://www.pianshen.com/article/82221204833/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring security oauth2 sso退出 的相关文章

随机推荐

  • Java学习之旅--线程的创建方法

    线程创建的方法一 span class hljs keyword package span com geminno day14 createthread1 span class hljs keyword public span span c
  • select搜索功能实现

    select搜索功能实现 最近在找工作 没时间写博客 现在找到了 就发发工作上的代码吧 xff01 今天我们说说select标签的搜索功能 xff1b 拿到任务时 xff0c 我先想到就是上网找资料 xff0c 最后看到的都是各种jquer
  • 【转】setStyleSheet的用法

    转自 xff1a https www cnblogs com aheng123 p 5630761 html 使用setStyleSheet来设置图形界面的外观 xff1a QT Style Sheets是一个很有利的工具 xff0c 允许
  • Mysql插入语句之value与values区别

    本文编写时间是在几年前 xff0c 可能不符合现有MySQL最新版本文档所述 xff0c 请自行判断 value与values区别 http dev mysql com doc refman 5 7 en insert html 看了一下官
  • 将jetson nano tf卡 制作成img镜像批量克隆

    jetson nano tf卡系统克隆 注意 这篇文章所使用的方式如果失败的话请看另一篇 大概率失败 1 linux 安装工具 根据使用的文件系统大小生成镜像文件 更改空镜像文件的分区表信息 挂载虚拟磁盘并对虚拟磁盘进行分区格式化 备份SD
  • 电机,电调,电池搭配的一些关系

    电机 2212 920KV 含义 宽22mm xff0c 高12mm 在1V电压下每分钟920转 kv 值越大 转速越快 配的桨叶越小 扭力越小 kv值越小 转速越慢 配的桨叶越大 扭力越大 电流关系 电机满载电流 lt 电调输出电流 lt
  • 使用Docker安装RabbitMq

    1 搜索镜像 docker search rabbitmq management 2 拉取镜像 docker pull macintoshplus rabbitmq management 3 启动rabbitmq docker run d
  • git如何回滚到历史某个版本

    场景 xff1a 比如某员工误操作提交到了公司比较重要的develop分支 xff0c 如何恢复到之前的某一个版本呢 xff0c git如何回滚到历史某个版本 方法一 xff1a idea里面git操作版本 1 2 选中某一个版本 xff0
  • 使用Idea中Docker插件部署Springboot应用并远程Debug

    目前在java开发中 xff0c 由于一套完整的项目所涉及到的微服务模块很多 xff0c 要是按照传统的方式一个一个部署比较麻烦 xff0c 所以很多情况下我们都会使用docker镜像的方式进行部署 当我们的应用部署好之后 xff0c 若运
  • ClickHouse安装(单机版)

    官方说明文档 yum span class token function install span span class token parameter variable y span yum utils yum config manage
  • docker推送镜像至阿里私有镜像仓库

    docker推送镜像至阿里私有镜像仓库 一 注册阿里私有镜像仓库二 将公共镜像推送至私有镜像仓库1 首先拉取到mysql镜像2 登录阿里云Docker Registry xff08 这里的信息要更换成自己的 xff09 3 将mysql镜像
  • Docker安装Jenkins

    查找jenkins镜像 span class token function docker span search jenkins 拉取jenkins镜像 span class token function docker span pull
  • HDFS通过WEB UI操作文件

    HDFS通过WEB UI操作文件 1 创建目录2 向指定目录上传文件3 返回上层目录4 移动文件5 删除文件6 修改文件权限 所有者 xff0c 组等信息7 搜索文件8 查看文件 进入Browse the file system 1 创建目
  • Jenkins创建多分支流水线

    Jenkins创建多分支流水线 一 准备工作二 安装插件1 安装Docker和Docker Pipeline2 安装Blue Ocean3 安装Publish Over SSH 三 创建多分支流水线四 配置以及脚本四 构建项目 在我们的实际
  • Jenkins利用docker部署vue项目

    Jenkins利用docker部署vue项目 一 环境准备1 安装docker2 安装nodejs3 安装cnpm与配置淘宝镜像4 jenkins安装nodejs插件 二 jenkins以vue项目1 全局参数配置2 源码配置3 构建环境4
  • Jenkins利用阿里镜像仓库部署springboot应用

    Jenkins利用阿里镜像仓库部署springboot应用 一 本次目标二 环境准备三 jenkins创建项目1 添加全局配置参数 xff0c 这里我配置了版本号信息2 源码配置3 maven打包 amp docker镜像包生成4 远程机器
  • 网页设计与制作(HTML+CSS)(一)

    初识html 名词解释 xff1a Internet xff1a 即因特网 www World Wide Web xff1a 即万维网 URL Uniform Reource Locator xff1a 统一资源定位符 DNS Domain
  • 局域网中连接mysql数据库

    解决局域网中无法连接mysql数据库问题 在局域网中如果多人协作开发 xff0c 肯定会连接同一数据库 mysql 服务 xff0c 可是在连接时总是遇到问题 现提供解决方案如下 xff1a 只需要修改mysql配置文件 xff1a 在li
  • GPS在ROS中的测试和使用

    原链接 通过GPS机器人可以获取定位信息 ROS中也提供了GPS的相关驱动包 xff0c 可以方便的使用GPS的定位信息 下面以蓝鲸GPS模块为例演示如何在ROS中使用GPS传感器 其他的可以通过串口指令发布nmea语句的GPS模块都是通用
  • spring security oauth2 sso退出

    一 客户端退出调用认证中心 logout服务 这种方式是客户端先退出 xff0c 然后再退出认证中心 方法1 xff1a 集成WebSecurityConfigurerAdapter xff0c 重写方法如下 xff08 推荐这种方式 xf