springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用)

springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用日志)

实现接口Feign.RequestInterceptor

实现接口 feign.RequestInterceptor 并注入到IOC容器即可生效
在这里插入图片描述

示范代码如下

  1. 拷贝请求头,将原请求信息透传下去给被调用的feign服务,部分头不拷贝,例如content-length
  2. 内部调用鉴权标记,在发起feign调用时加上标记(每天一个token,64位随机字符,在redis记录了今天的和昨天的,都有效),让内部调用时有权限调用被调服务
  3. 打印feign调用目标的日志

/**
 * @author humorchen
 * date: 2024/5/27
 * description: feign 请求拦截器
 **/
@Slf4j
public class FeignInterceptor implements RequestInterceptor {


    /**
     * 跳过某些 header
     * 比对时会忽略大小写
     */
    private static final Set<String> SKIP_HEADER_NAMES = new HashSet<>(Arrays.asList("transfer-encoding", "content-length", "accept", "accept-encoding", "connection"));

    static {
        // 转换为小写,避免大小写不一致
        HashSet<String> lowCaseSet = new HashSet<>(SKIP_HEADER_NAMES.size());
        SKIP_HEADER_NAMES.forEach(name -> lowCaseSet.add(name.toLowerCase()));
        SKIP_HEADER_NAMES.clear();
        SKIP_HEADER_NAMES.addAll(lowCaseSet);
    }

    /**
     * Called for every request. Add data using methods on the supplied {@link RequestTemplate}.
     *
     * @param template
     */
    @Override
    public void apply(RequestTemplate template) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        // 拷贝请求头信息,透传信息
        if (requestAttributes != null) {
            HttpServletRequest request = requestAttributes.getRequest();
            Enumeration<String> headerNames = request.getHeaderNames();
            if (headerNames != null) {
                while (headerNames.hasMoreElements()) {
                    // 跳过某些 header
                    String name = headerNames.nextElement();
                    if (SKIP_HEADER_NAMES.contains(name.toLowerCase())) {
                        continue;
                    }
                    String values = request.getHeader(name);
                    template.header(name, values);
                }
            }
        }
        // 内部调用鉴权标记
        template.header(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());
        // 测试环境打印
        log.debug("【新版权限日志】FeignInterceptor 发起Feign调用({}),请求头已拷贝,same-token已颁发。", template.url());
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis:Redis的数据类型介绍

Redis 支持多种数据类型&#xff0c;每种数据类型都有其特定的用途和优势。以下是 Redis 中主要数据类型的介绍&#xff1a; 1. String&#xff08;字符串&#xff09; 介绍&#xff1a;最基本的 Redis 数据类型&#xff0c;通常用于缓存和存储经常需要读取的数据。 示例&am…

病理级Polymer酶标二抗IHC试剂盒上线!

免疫组织化学 Immunohistochemistry,lHC 是利用抗体与抗原特异性识别原理&#xff0c;对组织样本中的抗原进行定位/定性分析的实验技术。组织切片保留了样品的解剖学结构特征&#xff0c;从而可以高分辨率地显现蛋白在细胞&#xff0c;甚至细胞器中的定位。基于以上特性&…

开源Mamba-2性能狂飙8倍!多个Mamba超强进化体拿下顶会

MambaOut的热度刚过去没多久&#xff0c;Mamba-2就带着它狂飙8倍的性能炸场了。 Mamba-2的核心层是对Mamba的选择性SSM的改进&#xff0c;同等性能下&#xff0c;模型更小&#xff0c;消耗更低&#xff0c;速度更快。与Mamba不同&#xff0c;新一代的Mamba-2再战顶会&#xff…

JVM垃圾收集器和性能调优

目标&#xff1a; 1.JVM垃圾收集器有哪几种&#xff1f; 2.CMS垃圾收集器回收步骤。 一、JVM常见的垃圾回收器 为什么垃圾回收的时候需要STW? 标记垃圾的时候&#xff0c;如果不STW&#xff0c;可能用户线程就会不停的产生垃圾。 1.1 单线程收集 Serial和SerialOld使用单…

windows架设NTP时间服务器进行时间同步

一、windows架设NTP时间服务器 1.win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_LOCAL_MACHINE\SYSTEM\Current…

鸿蒙全栈开发-一文读懂鸿蒙同模块不同模块下的UIAbility跳转详解

前言 根据第三方机构Counterpoint数据&#xff0c;截至2023年三季度末&#xff0c;HarmonyOS在中国智能手机操作系统的市场份额已经提升至13%。短短四年的时间&#xff0c;HarmonyOS就成长为仅次于安卓、苹果iOS的全球第三大操作系统。 因此&#xff0c;对于鸿蒙生态建设而言&a…

前端--导出

这边记录我们公司后端做的导出接口和前端是如何对接的 这边的技术栈是&#xff1a; 1&#xff1a; react 2&#xff1a; fetch 第一步&#xff1a;简单封装--导出界面 import { DrawerForm } from ant-design/pro-components; import { CloseOutlined } f…

不会制作企业版电子书?学会这几个步骤就好啦!

公司安排你制作一本专业的电子书&#xff0c;不知道如何下手&#xff1f;别担心&#xff0c;今天LookLook同学就来给大家分享一下如何轻松制作企业版电子书。参考这几个步骤&#xff0c;相信你一定能轻松搞定&#xff01; 第一步&#xff1a;明确电子书的目标和受众 在开始制作…

【ai】DeepStream 简介

NVIDIA Metropolis 平台。 NVIDIA 大都会 利用视觉 AI 将来自数万亿物联网设备的数据转化为有价值的见解。 NVIDIA Metropolis 是一个应用程序框架、一套开发工具和合作伙伴生态系统,它将视觉数据和 AI 结合在一起,以提高各行各业的运营效率和安全性。它有助于理解数万亿个…

漏洞挖掘 | 验证码绕过

还是老规矩&#xff0c;开局一个登录框&#xff0c;中途漏洞全靠舔&#xff0c;先来研究一下这个登录窗口 很好&#xff0c;发现有验证码登录&#xff0c;先测试测试能不能并发 看来没有&#xff0c;只成功发送了两条&#xff0c;再看看验证码是不是4位 很好&#xff0c;是4位。…

山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十八)- 微服务(8)

目录 11.4 SpringAMQP 11.4.2 Work Queue工作队列 11.4.3 发布订阅模型 11.4.4 FanoutExchange(广播交换机) 11.4.5 DirectExchange(路由模式交换机) 11.4.6 TopicExchange 11.5 消息转换器 11.4 SpringAMQP 父工程引入AMQP依赖 <!--AMQP依赖&#xff0c;包含RabbitMQ…

什么无线领夹麦克风音质最好?领夹麦克风品牌排行榜前十名推荐

​在当今的数字化浪潮中&#xff0c;个人声音的传播和记录变得尤为重要。无论是会议中心、教室讲台还是户外探险&#xff0c;无线领夹麦克风以其卓越的便携性和连接稳定性&#xff0c;成为了人们沟通和表达的首选工具。面对市场上琳琅满目的无线麦克风选择&#xff0c;为了帮助…

中国出海企业“奔赴”俄罗斯蓝海 有哪些认知需要对齐? | TopOn变现干货

中国企业加速出海已成常态化。在出海大潮席卷下&#xff0c;中国企业的身影已遍布欧美、东南亚、拉美、中东等多个成熟市场和潜力市场&#xff0c;眼下&#xff0c;这些热门市场几成红海&#xff0c;准入门槛也相对提高。而俄罗斯市场&#xff0c;作为全球TOP10的经济体之一&am…

在Linux上的Java项目导出PDF乱码问题

在Linux上的Java项目导出PDF乱码问题 场景&#xff1a;一个Java项目导出PDF&#xff0c;在我本地导出是没有问题&#xff0c;但是部署上Linux上后&#xff0c;导出就出现了乱码了。 处理方案 我这里使用的处理方案是在Linux服务器上安装一些PDF需要使用的字体 1.把字体上传到…

找寻卓越的生成式人工智能应用案例?别浪费在无趣之处!

“ 生成式AI&#xff08;AI&#xff09;技术的强大众所周知。但不知道你们是否和我有一样感觉&#xff0c;目前市面上&#xff0c;企业对生成式AI的应用&#xff0c;场景大多较为单一。” Ingo Mierswa Altair产品开发高级副总裁 我说这些生成式AI的应用单一&#xff0c;是指…

upload-labs-第五关

目录 第五关 1、构造.user.ini文件 2、构造一个一句话木马文件&#xff0c;后缀名为jpg 3、上传.user.ini文件后上传flag.jpg 4、上传成功后访问上传路径 第五关 原理&#xff1a; 这一关采用黑名单的方式进行过滤&#xff0c;不允许上传php、php3、.htaccess等这几类文件…

区块链(Blockchain)调查研究

文章目录 1. 区块链是什么&#xff1f;2. 区块链分类和特点3. 区块链核心关键技术3.1 共识机制3.2 密码学技术3.4 分布式存储3.5 智能合约 4. 区块链未来发展趋势5. 区块链 Java 实现小案例 1. 区块链是什么&#xff1f; 区块链是分布式数据存储、点对点传输、共识机制、加密算…

在自己的esp idf工程中添加ESP-ADF

其实esp-adf也就相当于是一个组件&#xff0c;直接在工程的CMakeList.txt中加入就行&#xff0c;这样就可以满足自己的需要&#xff0c;直接在当前工程上增加adf&#xff0c;使用其中的部分功能。 参考adf基础工程可以发现&#xff0c;一条命令即可。 include($ENV{ADF_PATH}/…

【ocean】测试phaseDeg,phaseDegUnwrapped和phaseMargin

对二级运放进行测试 -101.35,78.01,78.01 GBW gainBwProd((VF("/Vout2") / VF("/Vin")))PHASE phaseDegUnwrapped((VF("/Vout2") / VF("/Vin")))plot( PHASE ?expr ( "PHASE" ) ) PHASEdeg phaseDeg((VF("/Vout2&q…

SQL语句练习每日5题(二)

题目1——查找学校是北大的学生信息 筛选出所有北京大学的学生进行用户调研&#xff0c;请你从用户信息表中取出满足条件的数据&#xff0c;结果返回设备id和学校。 解法&#xff1a;考察where条件语句 select device_id,university from user_profile where university北京…