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);
        }
      
    }
相关推荐
Lee川1 天前
mini-cursor 揭秘:从 Tool 定义到 Agent 循环的完整实现
前端·人工智能·后端
星浩AI1 天前
OpenHuman 对比 OpenClaw、Hermes Agent
人工智能·后端·agent
小江的记录本1 天前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
geovindu1 天前
go: Semaphore Pattern
开发语言·后端·设计模式·golang·企业级信号量模式
IT_陈寒1 天前
Redis内存用爆了,原来我们都忽略了这个配置
前端·人工智能·后端
武子康1 天前
Java-02 深入浅出MyBatis 3 快速入门:环境配置、项目创建与 CRUD 操作
java·后端
Don.TIk1 天前
ChapterOne-搭建项目骨架
java·spring·spring cloud·mybatis
南极企鹅1 天前
事务&@Transactional注解
java·数据库·spring·oracle·mybatis
未若君雅裁2 天前
Spring Boot 自动配置原理与常用注解
java·spring boot·后端
Xiacqi12 天前
Java数据库连接--JDBC--DRUID
数据库·后端