OpenFeign调用服务请求头丢失Token的解决

 更新时间:2021年06月25日 09:53:49   作者:zhangjianshan007  
这篇文章主要介绍了OpenFeign调用服务请求头丢失Token的解决方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

OpenFeign调用服务请求头丢失Token

导致原因:

在这里插入图片描述

解决方案:

在这里插入图片描述

代码实现

@Configuration
@Slf4j
public class FeignConfig {
    @Value("${jwt.header}")
    private String tokenHeader;
    @Bean("requestInterceptor")
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                log.info("进入feign拦截器...");
                ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                HttpServletRequest request = requestAttributes.getRequest();// 老请求
                String authorization = request.getHeader(tokenHeader);
                log.info(authorization);
                requestTemplate.header(tokenHeader, authorization);
            }
        };
    }
}

Feign传参对象数据丢失问题

Feigin不支持Key-value形式的请求体传参,所有在传递对象参数的时候需要将服务端的接口加上@RequstBody注解,Feign消费端也需要加上@RequstBody,但是会出现前端在直接访问服务器接口时,需要构建JSON串放在Body里传递过来。

Get请求又不支持Body。为了解决这个问题,这里记录解决方案。

1.如果不考虑前端直接调用接口和Feign调用接口不一致

服务端的接口加上@RequstBody注解,Feign消费端也需要加上@RequstBody。

2.升级springboot版本到2.1.x.使用Spring Cloud OpenFeign提供@SpringQueryMap注解

Feign里加上

    class AuditFeiginConfig {
        @Bean
        public Contract customerContract() {
            return new feign.Contract.Default();
        }
    }

完整Feign代码:

 
import feign.Contract;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; 
import com.fasterxml.jackson.databind.JsonNode;
import com.galaplat.base.core.common.exception.BaseException;
import com.galaplat.product.center.databook.plugin.vos.AuditVO; 
 
@FeignClient(name = "galaplat-product-center", fallback = AuditFeignHystrixService.class,configuration = IAuditFeign.AuditFeiginConfig.class)
public interface IAuditFeign {    
    @PostMapping("/XXX")
    JsonNode submit(@SpringQueryMap AuditVO auditVO) throws Exception; 
    class AuditFeiginConfig {
        @Bean
        public Contract customerContract() {
            return new feign.Contract.Default();
        }
    }
}

这样服务端接口就不一定要加@RequstBody.

服务端接口代码

 //这里就可以不加@RequestBody,默认应该是@RequestParam
    @PostMapping("/XXX")
 public Object submit(AuditVO auditVO) throws Exception {
  return null;
 }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot 多module打包方案示例详解

    Springboot 多module打包方案示例详解

    在使用Springboot进行多模块项目开发时,可能会遇到模块间依赖不存在的问题,本文介绍了两种主要的解决方案,这些方法有助于生成可执行的jar包,并确保模块间正确依赖,适用于多层项目结构中的有效管理和打包,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • Java RabbitMQ的三种Exchange模式

    Java RabbitMQ的三种Exchange模式

    这篇文章主要介绍了Java RabbitMQ的三种Exchange模式,分别为Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息发送导RouteKey中指定的Queue,Direct模式可以使用Rabbit自带的Exchange
    2022-08-08
  • SpringBoot整合Mybatis-plus案例及用法实例

    SpringBoot整合Mybatis-plus案例及用法实例

    mybatis-plus是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生,下面这篇文章主要给大家介绍了关于SpringBoot整合Mybatis-plus案例及用法实例的相关资料,需要的朋友可以参考下
    2022-11-11
  • java 实现读取clob

    java 实现读取clob

    这篇文章主要介绍了java 如何实现读取clob,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Java8中StringJoiner类的使用详解

    Java8中StringJoiner类的使用详解

    Java在java.util包中添加了一个新的最终类StringJoiner。可以用于构造由定界符分隔的字符序列。本文将通过示例和大家分享一下StringJoiner类的使用,需要的可以参考一下
    2022-10-10
  • springboot中request和response的加解密实现代码

    springboot中request和response的加解密实现代码

    这篇文章主要介绍了springboot中request和response的加解密实现,在springboot中提供了RequestBodyAdviceAdapter和ResponseBodyAdvice,利用这两个工具可以非常方便的对请求和响应进行预处理,需要的朋友可以参考下
    2022-06-06
  • 解决IDEA中快捷键Alt+Enter不能使用的问题

    解决IDEA中快捷键Alt+Enter不能使用的问题

    这篇文章主要介绍了解决IDEA中快捷键Alt+Enter不能使用的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • ClassLoader类加载源码解析

    ClassLoader类加载源码解析

    这篇文章主要为大家详细解析了ClassLoader类加载源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 由ArrayList来深入理解Java中的fail-fast机制

    由ArrayList来深入理解Java中的fail-fast机制

    fail-fast俗称快速失败,是在多线程进行迭代操作时产生冲突的一种异常抛出机制,下面我们就由ArrayList来深入理解Java中的fail-fast机制.
    2016-05-05
  • Myeclipse部署Tomcat_动力节点Java学院整理

    Myeclipse部署Tomcat_动力节点Java学院整理

    这篇文章给大家介绍了Myeclipse部署Tomcat的相关知识,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-07-07

最新评论