openfeign 整合 springboot 实现 带有token的调用

在使用openfeign的时候会有401等会画过期等问题 配置一下openfegin config即可

1.springboot添加pom文件

		<!-- openfeign  -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

2.创建接口

/**
 * @Date 2020/7/1 09:37
 * @Created by gaoyuanfeng
 */
@FeignClient(value = "isim-device-service")
public interface OpenFeignDeviceService {

    @PostMapping("device/api/tenants/TemporaryPlan")
    ResponseEntity<?> insTemporaryPlan(@RequestBody TemporaryPlanDTO dto);

}

isim-device-service 为想调用的服务
url写全


3.添加FeignConfig


/*
 * @(#)FeignConfig.java	2020618日下午5:16:16
 * Copyright All rights reserved.
 */
package com.zhuning.isim.hazard.config;
import com.zhuning.isim.util.Constants;
import feign.Feign;
import feign.Logger;
import feign.RequestInterceptor;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 *
 * Feign自定义配置
 * @author: wangyf
 * @version: 1.0 Date: 2020618 下午5:16:16
 */
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
@Slf4j
public class FeignConfig {

    @Bean
    public RequestInterceptor requestInterceptor() {
        return requestTemplate -> {
            ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            if (null != attributes) {
                HttpServletRequest request = attributes.getRequest();
                log.info("Feign request: {}", request.getRequestURI());
                // 将token信息放入header中
                requestTemplate.header(Constants.JWT_TOKEN, request.getHeader(Constants.JWT_TOKEN));
            }
        };
    }



    /**
     * Feign 客户端的日志记录,默认级别为NONE
     * Logger.Level 的具体级别如下:
     * NONE:不记录任何信息
     * BASIC:仅记录请求方法、URL以及响应状态码和执行时间
     * HEADERS:除了记录 BASIC级别的信息外,还会记录请求和响应的头信息
     * FULL:记录所有请求与响应的明细,包括头信息、请求体、元数据
     */
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }

    /**
     * Feign支持文件上传
     * @param messageConverters
     * @return
     */
    @Bean
    @Primary
    @Scope("prototype")
    public Encoder multipartFormEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
        return new SpringFormEncoder(new SpringEncoder(messageConverters));
    }
}

4.启动类添加注解

在这里插入图片描述


版权声明:本文为weixin_42404521原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。