springCloud-Feign 拦截器使用,传递header中的值

场景:服务A 调用 服务B

1 编写拦载器类

复制代码
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;


public class Interceptor_a implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        System.err.println("拦截器");
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        template.header("code",request.getHeader("code"));
    }
}

2 使用拦截器,两种方法,选一种即可

复制代码
//方法1
@FeignClient(value= "app_b",
        path = "/dts_address",
        configuration = Interceptor_a.class
)

#方法2
feign:
  sentinel:
    enabled: true
  client:
    config:
      app_b:
        # 配置拦截器
        request-interceptors:
          - org.example.Interceptor_a
      default:
        logger-level: full
        connect-timeout: 10000
        read-timeout: 10000
logging:
  level:
    cn.haiwang: debug

3 测试,服务A发请示时,在header中设置参数code,服务B可以拿到拦截器里设置的信息

复制代码
/*
服务b 工程的代码
*/
@RequestMapping(value="/add")
    public Object add(@RequestBody DtsAddress dtsAddress
                      ){
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements())
        {
            String s = headerNames.nextElement();
            String header = request.getHeader(s);
            System.err.println(s+" : "+header);
        }
      
    }
相关推荐
山岚的运维笔记4 小时前
SQL Server笔记 -- 第73章:排序/对行进行排序
数据库·笔记·后端·sql·microsoft·sqlserver
苍何5 小时前
豆包还能这么玩?附 13 大隐藏玩法,效率起飞(建议收藏)
后端
苍何5 小时前
Kimi 版 OpenClaw 来了,5000+ Skills 随便用,确实给力!
后端
百锦再5 小时前
Jenkins 全面精通指南:从入门到脚本大师
运维·后端·python·servlet·django·flask·jenkins
vx-Biye_Design5 小时前
servlet家政公司管理系统-计算机毕业设计源码01438
java·vue.js·spring·servlet·tomcat·maven·mybatis
Open Source Thoughts6 小时前
OpenClaw.ai:Agentic AI 时代的“SpringFramework”时刻
java·人工智能·spring·prompt·开源软件·agi·ai-native
forestsea6 小时前
优雅终结启动顺序噩梦:ObjectProvider —— Spring 4.3 开始引入
java·后端·spring
小楼v6 小时前
⭐解锁RAG与Spring AI的实战应用(万字详细教学与完整步骤流程实践)
java·后端·rag·spring ai·ai大模型应用
毕设源码-小云学姐6 小时前
计算机毕业设计springboot医疗档案管理系统 基于 SpringBoot 的电子医疗档案管理系统的设计与实现 SpringBoot 框架下的医疗档案信息化管理系统开发
spring boot·后端·课程设计
想不明白的过度思考者6 小时前
JavaEE进阶 ——【SpringBoot 快速上手】从环境搭建到HelloWorld实战
java·spring boot·spring·java-ee