OpenFeign认证上下文信息的传递

news2024/11/15 13:53:59

基本思路

其中网关部分不是本章讨论的范围,网关处理与后续服务的处理类似。

  • 发送处理:将认证信息植入到请求信息中
  • 接收处理:从请求头中获取到认证信息,并解析为用户信息,供后续业务使用。

有两个思路:

  1. 将认证信息放到请求头中,向下传递。这种方式适用于用户认证上下文中信息较少,且无需包含权限、角色等信息时,使用这种方式更方便。
  2. 将AccessToken放到请求头中,向下传递。用户认证上下文中包含大量信息,如包含功能权限、数据权限,等信息时,推荐使用这种方式。这种方式的弊端是每次接口访问可能会出现多次的缓存访问。

这种两种方式都需要在入口处通过Filter将用户信息,放到ThreadLocal中。以便在后续使用。

前置准备

我们需要先准备一些类和实体来做基本的实现支持

  • 用户信息实体
  • 用户ThreadLocal存储工具类
  • 认证信息获取工具类

用户实体:BaseSecurityUser

@Data
public class BaseSecurityUser {
   

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户姓名
     */
    private String name;

    // ... 省略其他字段
}

SecurityContext:用户将BaseSecurityUser放到ThreadLocal中,以便在后续的业务中使用

public class SecurityContext {
   

    private SecurityContext() {
   
    }

    private static final ThreadLocal<BaseSecurityUser> CONTEXT_HOLDER = new InheritableThreadLocal<>();

    public static void clear() {
   
        CONTEXT_HOLDER.remove();
    }

    public static BaseSecurityUser getUser() {
   
        return CONTEXT_HOLDER.get();
    }

    public static void setUser(BaseSecurityUser user) {
   
        CONTEXT_HOLDER.remove();
        CONTEXT_HOLDER.set(user);
    }
}

这里使用 InheritableThreadLocal 是为了在子线程中也能获取到用户信息。ThreadLocal 相关内容不是本篇的重点,不再在此赘述。

SecurityUtils:用于在后续的业务代码中方便的获取到用户信息

public final class SecurityUtils {
   

    private SecurityUtils() {
   
    }

    /**
     * 获取用户信息
     *
     * @return 用户信息
     */
    public static BaseSecurityUser getUserInfo(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1422982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

githacker安装详细教程,linux添加环境变量详细教程(见标题三)

笔者是ctf小白&#xff0c;这两天也是遇到.git泄露的题目&#xff0c;需要工具来解决问题&#xff0c;在下载和使用的过程中也是遇到很多问题&#xff0c;写此篇记录经验&#xff0c;以供学习 在本篇标题三中有详细介绍了Linux系统添加环境变量的操作教程&#xff0c;以供学习 …

242. 有效的字母异位词(力扣)(C语言题解)

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 前提&#xff1a; 看本文章之前&#xff0c;建…

【期末】openGL基础知识+编程题

头文件的使用 若应用程序使用OpenGL核心函数&#xff0c;应包括头文件<gl/gl.h> 使用GLU库函数&#xff0c;应包括头文件<gl/glu.h> 使用AUX库函数&#xff0c;应包括头文件<gl/glaux.h> 使用WGL和Win32应包括头文件<windows.h>基本程序结构 1.定…

uniCloud快速上手

uniCloud快速上手 hello uniCloud Hello uniCloud&#xff0c;是一个示例&#xff0c;演示了 uniCloud 的各种能力。 体验示例 这个示例目前只发布了h5版本和Android app版。 Hello uniCloud部署了2套&#xff0c;分别连接uniCloud的阿里云版和腾讯云版。 h5版地址&#x…

abap_bool 类型

abap_bool 类型 abap_bool 有两种abap_true和abap_false&#xff0c;abap_true代表x&#xff0c;abap_false是空

林浩然的编程奇遇记:从“单词精灵”到“英语全能小助手”

林浩然的编程奇遇记&#xff1a;从“单词精灵”到“英语全能小助手” Lin Haoran’s Programming Adventure: From “Word Wizard” to “English All-in-One Assistant” 在那个代码编织而成的奇妙世界里&#xff0c;我们有幸遇见了一位名叫林浩然的程序员小哥。他可不是那种埋…

ping: connect: Resource temporarily unavailable

问题 主机ping自己或者其他的设备报错如下 ping: connect: Resource temporarily unavailable 看了下网络上的其他说法&#xff0c;大多说是下面的两个限制 1.网络连接队列的大小 2.系统级别的最大文件描述符数量 根因分析 调整连接队列和最大文件描述符数&#xff0c;问题仍…

[Mac软件]Amadeus Pro 2.8.13 (2662) Beta多轨音频编辑器激活版

应用介绍 Amadeus pro for mac是Mac os平台上的一款功能非常强大的Mac音乐编辑器&#xff0c;Amadeus pro for mac是一款强大的多轨音频编辑器&#xff0c;支持多种格式&#xff0c;如MP3, AAC, Ogg Vorbis, Apple Lossless, AIFF, Wave等。 多轨编辑 Amadeus Pro是一个功能齐…

微软Azure-openAI 测试调用及说明

本文是公司在调研如何集成Azure-openAI时&#xff0c;调试测试用例得出的原文&#xff0c;原文主要基于官方说明文档简要整理实现 本文已假定阅读者申请部署了模型&#xff0c;已获取到所需的密钥和终结点 变量名称值ENDPOINT从 Azure 门户检查资源时&#xff0c;可在“密钥和…

微信小程序(二十八)网络请求数据进行列表渲染

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.GET请求的规范 2.数据赋值的方法 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item">&…

【全csdn最前沿LVGL9】基础对象lv_obj

文章目录 前言一、LVGL9的下载二、基础对象lv_obj2.1 概述2.2 布局2.3 lv_obj的使用创建一个lv_obj设置大小设置位置设置对齐父对象与子对象事件 总结 前言 LVGL&#xff08;LittlevGL&#xff09;是一个开源的嵌入式图形库&#xff0c;用于在嵌入式系统中创建用户界面。LVGL提…

亚信安慧AntDB:分布式数据库的崛起与挑战

亚信安慧AntDB 是国产的分布式数据库&#xff0c;它具备快速发展的潜力。随着互联网技术的迅猛发展&#xff0c;大数据时代的到来&#xff0c;数据库的需求不断增长。在这样的背景下&#xff0c;国产分布式数据库正逐渐崭露头角&#xff0c;AntDB作为其中的重要代表&#xff0c…

新东方财报解读:新一轮增长逻辑或蕴于电商业务?

从财报表现来看&#xff0c;教育市场的元气在持续提升。 近日&#xff0c;新东方、好未来等上市公司陆续公布了2023年9-11月的业绩表现。其中&#xff0c;好未来实现营收3.7亿美元&#xff0c;同比增长60.5%&#xff1b;归母净亏损2394.6万美元&#xff0c;亏幅同比收窄53.6%。…

C/C++ - 类的多态机制

目录 多态概念 多态定义 多态的触发机制 虚函数 虚函数表 虚析构函 虚析构函数声明 虚析构函数的作用 纯虚函数 纯虚函数的声明 纯虚函数的作用 抽象类 多态原理 虚函数表 & 虚函数指针 继承机制下的虚函数表 动态绑定 多态概念 狗狗发出的声音为 -> 旺…

【C语言】整数和浮点数在内存中的存储

前言 我们都知道&#xff0c;在创建一个变量的时候&#xff0c;编译器会自动开辟一块内存空间用于存放它&#xff0c;但是对于不同的数据类型&#xff0c;它们的存储形式也会有所不同。今天就让我们一起来学习整数和浮点数在内存中的存储 1. 整数在内存中的存储 我们都知道&…

编译Opencv3.3.1遇到的编译器无法识别的警告的问题解除:

问题描述&#xff1a; 本文&#xff0c;就是在一个硬件的SDK中用到了opencv3.3.1的版本&#xff0c;在笔者目前的VS2019,CUDA11版本下编译的问题和解决。在做Cmake的configure的时候&#xff0c;Cmake报了一个找不到编译器版本的错误, Selecting windows SDK version 10.0.1904…

Linux下使用信号量实现PV操作

一.信号量与PV操作概述 在多道程序系统中&#xff0c;由于资源共享与进程合作&#xff0c;使各进程之间可能产生两种形式的制约关系&#xff0c;一种是间接相互制约&#xff0c;例如&#xff0c;在仅有一台打印机的系统&#xff0c;同一时刻只能有一个进程分配到到打印机&…

Axure9知识点复盘

axure9 Axure有四种类型文件&#xff1a; 团队文件示例.rpteam 元件库文件示例.rplib 原型导出文件示例.html 原型文件示例.rp 将反复被调用都模板作成母版 鼠标和键盘的交互 形状交互 登录页面的实现 动态面版滚动条的使用 如何在Axure中动态加载图表&#xff08;Axh…

H5适配iOS顶部和底部安全区域

在移动端Web开发中&#xff0c;适配不同设备的屏幕是一个重要且挑战性的任务。对于iOS设备来说&#xff0c;这一任务尤为关键&#xff0c;因为自iPhone X起&#xff0c;苹果的设备引入了刘海屏、圆角等设计&#xff0c;这就要求开发者在Web页面中特别处理顶部和底部的安全区域。…

在RunnerGo测试平台中做WebSocket、Dubbo、TCP/IP接口测试

大家好&#xff0c;RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验&#xff0c;最近得知RunnerGo新增对&#xff0c;WebSocket、Dubbo、TCP/IP&#xff0c;三种协议API的测试支持&#xff0c;本篇文章跟大家分享一下使用方法。 WebSocket协议 WebSocket 是一种…