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);
        }
      
    }
相关推荐
程序员爱钓鱼几秒前
Node.js 编程实战:全面理解异步错误处理
后端·node.js·trae
IT_陈寒5 分钟前
从混乱到优雅:这5个现代JavaScript技巧让你的代码性能提升50%
前端·人工智能·后端
qq_348231857 分钟前
完整的 Spring Boot + Redisson 分布式锁示例
spring boot·分布式·后端
m0_740043737 分钟前
SpringMVC/Spring Boot 控制器返回视图路径(相对 / 绝对路径)核心总结
java·spring boot·后端·spring
程序员爱钓鱼10 分钟前
Node.js 编程实战深入理解Promise与async&await
后端·node.js·trae
0和1的舞者14 分钟前
《Spring Bean&DI 通关笔记:从定义到注入的全场景避坑指南》
java·开发语言·学习·spring·ioc·di·web
qq_2562470519 分钟前
Spring Boot 事务实战:如何优雅解决 DB 与 MQ 的“双写不一致”?
后端
我是小妖怪,潇洒又自在21 分钟前
springcloud alibaba(七)Gateway--服务网关
spring·spring cloud·gateway
架构师专栏27 分钟前
Spring Boot 4 整合46篇教程,Spring Boot 4 企业级项目开发完整实践指南
java·spring boot·后端
Victor35628 分钟前
Netty(2)Netty的核心组件是什么?
后端