springcloud 微服务之间传递token解决方案

2023-11-14

后续更新地址: https://www.aiprose.com/blog/36

在springcloud 微服务中大部分是通过token来验证用户的,那么有个问题,假设现在有A服务,B服务,外部使用RESTApi请求调用A服务,在请求头上有token字段,A服务使用完后,B服务也要使用,如何才能把token也转发到B服务呢,最差的解决办法就是吧token放到请求参数中,但是这样第一个是明文传输,第二个是比较麻烦,前端每次都要加个参数。
这里可以使用Feign的RequestInterceptor,把request里的请求参数包括请求头全部复制到feign的request里,但是直接使用一般情况下HttpServletRequest上下文对象是为空的,其实加个配置就可以解决。

1.服务A中 application.yml 加入如下配置

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE  #加上这个就可以获取到HttpServletRequest
          thread:
            timeoutInMilliseconds: 10000

2.服务A中加入 FeginInterceptor

@Configuration
public class FeginInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
       try {
           Map<String,String> headers = getHeaders();
           for(String headerName : headers.keySet()){
               requestTemplate.header(headerName, headers.get(headerName));
           }
       }catch (Exception e){
           e.printStackTrace();
       }
    }
    private Map<String, String> getHeaders(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        Map<String, String> map = new LinkedHashMap<>();
        Enumeration<String> enumeration = request.getHeaderNames();
        while (enumeration.hasMoreElements()) {
            String key = enumeration.nextElement();
            String value = request.getHeader(key);
            map.put(key, value);
        }
        return map;
    }

}

若服务B或C也想传递token,加上上述A配置即可

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

springcloud 微服务之间传递token解决方案 的相关文章

随机推荐

  • Redis缓存与数据库的双写一致性(先更新数据库再删除缓存并结合RabbitMQ消息队列)

    实现双写一致性 通常会选择先更新数据库 然后再删除缓存的策略 并结合 RabbitMQ 的消息队列机制 主要有以下几个原因 保证数据一致性 在应用程序中 同一个数据可能存在于多个缓存服务节点中 这样会对数据的一致性造成很大影响 为了避免出现
  • JAVASE 注解与反射

    注解与反射都是框架的基础 注解 注解的格式 注释名 参数名 参数值 可以使用在 package class method field上 作为辅助信息 内置注解 Override 重写方法 会检测方法名称 Deprecated 表明该方法已过
  • 2013年春季学期最佳博客内容奖评选开始啦

    各位亲爱的俱乐部主席们 大家好啊 暑假来啦 CSDN高校俱乐部的福利也来啦 首先感谢你们为高校俱乐部的工作所付出的一切努力 从高校俱乐部的首页改版之后起 大家开始使用博客来记录自己俱乐部的工作内容 并且向俱乐部会员和主席们分享自己的学习生活
  • 魅族mx4服务器无响应,魅族MX4刷机失败解决方法

    2014 12 23 10 25 24 魅族MX4刷机失败解决方法 标签 魅族MX4 魅族MX4刷机教程 魅族MX4刷机失败 魅族MX4ROM 对于很多魅族 MX4的新手 对刷机不太了解 很容易导致刷机失败 那么魅族 MX4刷机失败应该如何
  • xshell连接时显示“服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法

    最近安装了openbsd6 7版本 安装完后通过xshell连接 弹出一个错误对话框 提示 服务器发送了一个意外的数据包 received 3 expected 20 的错误信息 检查sshd服务是正常开启的 防火墙也没阻止 奇怪了 我又重
  • pandas ExcelWriter定制格式(定制表头、渲染颜色等,非ExcelWriter标准的创建模式)...

    2019独角兽企业重金招聘Python工程师标准 gt gt gt ExcelWriter这个插件有个坑 就是已经设置好的格式是无法更改 原因详见这里 的 而且有如下问题 1 无法分别给一个单元格写入值和样式 对于单个单元格 必须在写入值的
  • 逆序数组(递归和非递归)(详细)

    逆序数组 递归和非递归 一 非递归 二 递归 一 非递归 思路 将第一个元素和最后一个元素交换 再将第二个元素和倒数第二个元素交换 直到所有元素全部交换 假设有一个数组arr abcdef 我们令它的第一个元素为arr left 最后一个元
  • 个人网页制作 大学生个人网页设计 个人网站模板 简单静态HTML个人网页作品 HTML+CSS+JavaScript

    HTML5期末大作业 个人网站设计 明星汉良 7页 带轮播特效 HTML CSS JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码 常见网页设计作业题材有 个人 美食 公司 学校 旅游
  • 从软件工程的角度写机器学习5——SVM(支持向量机)实现

    SVM实现 SVM在浅层学习时代是主流监督学习算法 在深度学习时代也往往作为最后一个预测层使用 说深度学习击败了SVM的纯属扯淡 SVM算法总体流程 本系列文章旨在讲解机器学习算法的工程实现方法 不在于推导数学原理 因此想深入了解原理的请移
  • Ora 28547连接服务器失败,可能是Oracle Net 管理错误问题详解(可能是最简单的)

    最近开始学Oracle了 然后安装过程中出现了很多问题 在这就不说了 其实是当时没有保留证据 课上老师说这玩意运气不好了可能一天都装不好 当时我不信 现在我信了 废话不多说 进入正题吧 首先放图 遇到这个问题我首先去找了很多博客 大多数都是
  • QT BUG解决:QMetaObject::connectSlotsByName: No matching signal for xxxxxxxxx

    QT BUG解决 QMetaObject connectSlotsByName No matching signal for xxxxxxxxx 问题描述 采用右键 转到槽 的功能生成的槽函数无法连接到信号 此时会报错该槽没有信号对应 QM
  • Bash编程语法

    变量 a 10 定义一个变量 echo a 输出变量a unset a 删除变量a readonly b b变量只读 只读变量不能删除 字符串 name asdsdsd 拼接字符串 name2 hello name 数组 arrayname
  • 快速序列化组件MessagePack介绍

    简介 MessagePack for C MessagePack CSharp 是用于C 的极速MessagePack序列化程序 比MsgPack Cli快10倍 与其他所有C 序列化程序相比 具有最好的性能 MessagePack for
  • arduino 智能车组装步骤_Arduino智能小车硬件安装说明

    1 工具准备 安装过程中可能用到以下工具 请提前准备好 2 小车地盘组装 按小车底盘组装说明组装小车底盘 说明截图如下 三 安装船型开关及电池盒 如下图 船型开关从底部按进 两侧引出电源开关线 电池盒如图安装 电池盒红线 正极 接船型开关
  • Qt SVG Viewer Example 看看看~

    Qt提供在widgets和其他paint device上渲染和展示SVG的类 本例就允许用户载入SVG文件并在QGraphicsView上用QGraphicsSvgItem显示它 并且例子还可以选择渲染者 QGraphicsView可以用Q
  • 【华为OD】

    华为OD试题注意事项 使用合适的编程语言 在华为OD机试中多数情况下使用C 或Java 按照题目要求进行编码 仔细阅读题目描述并理解要求 在编码前可以进行伪代码编写或画流程图有助于理解和排除逻辑错误 注意代码的规范性 注重代码的可读性和可维
  • vulnhub-Kioptrix2014靶场

    以下演示在测试环境进行 遵纪守法 靶场下载地址Kioptrix 2014 5 VulnHub 看网上都说这个靶场 在下载之后运行前 需要将靶场默认网卡卸载 之后再重新添加网卡 不然获取不到IP 本着听人劝 吃饱饭原则 安装前辈经验操作 信息
  • 冒泡排序和鸡尾酒排序

    传统冒泡排序 import java util Arrays author 新新 ClassName BubbleSort Description 冒泡排序 date 2022年03月17日 public class BubbleSort1
  • 快手春节现金褥羊毛活动 (攻略)

    注册得10元 扫描下面二维码 手机注册 然后下载快手 使用该手机号登陆后 10元到手 注意 一定要下载快手 该手机号登陆 只有新用户新设备才有10元 标题快手春节红包6亿活动中的组队PK活动 先放入口地址 微信扫一扫 点击下图 重要的规则
  • springcloud 微服务之间传递token解决方案

    后续更新地址 https www aiprose com blog 36 在springcloud 微服务中大部分是通过token来验证用户的 那么有个问题 假设现在有A服务 B服务 外部使用RESTApi请求调用A服务 在请求头上有tok