zoukankan      html  css  js  c++  java
  • Feign配置远程调用时携带原请求的token

    背景

    项目中需要用到以前开发的一套项目,需要复用里面的一些接口,远程调用发现出现了空指针异常,原来是token为null,尝试解决该问题。

    受限于之前开发的接口中没有参数,所以简单使用注解无法解决,故采用拦截请求的方式

    环境介绍

    SpringBoot 2.3.3.Release + OpenFeign 2.2.7.Release

    配置过程

    1、引入依赖, 配置feign

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.2.7.RELEASE</version>
    </dependency>
    

    2、注入配置类

    @Configuration
    @Slf4j
    public class FeignConfiguration implements RequestInterceptor {
        @Override
        public void apply(RequestTemplate requestTemplate) {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            String token = request.getHeader(HeaderConstants.TOKEN_HEADER_NAME); // HeaderConstants.TOKEN_HEADER_NAME 替换为自己的请求头名称,下同
            if(token == null){
                log.info("--请求中未携带token.......");
                return;
            }
            requestTemplate.header(HeaderConstants.TOKEN_HEADER_NAME, token);
        }
    }
    

    3、在@FeignClient注解中标注配置类

    @FeignClient(url = "${gizwits.config.system-api.url:}",value = IServiceName.SERVICE_NAME, path = "sys_user", configuration = FeignConfiguration.class)
    

    4、如果你debug的话,会发现FeignConfiguration中的attributes获取不到,需要再配置文件中添加如下配置就可以了

    hystrix:
      command:
        default:
          execution:
            isolation:
              strategy: SEMAPHORE
    

    大功告成!!

  • 相关阅读:
    计算机世界中解决问题的三种技术手段
    应用程序池的经典模式与集成模式的区别
    sh文件的编译
    flex学习开始了
    com,ActiveX,Ole之间的关系学习总结
    "正在等待localhost。。”问题的解决
    一些感悟
    面向对象软件工程方法学实践【转】
    外连接在sqlserver和access之间的差异
    外连接在sqlserver和access之间的差异
  • 原文地址:https://www.cnblogs.com/hnxbp/p/14975363.html
Copyright © 2011-2022 走看看