微服务:OpenFeign进行服务通讯时携带Token数据

文章目录

一、OpenFeign是什么?

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务 一样简单, 只需要创建一个接口并添加一个注解即可。

Nacos很好的兼容了Feign,Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。而且是集成的是Ribbon的轮询策略

二、使用场景

Figen主要的作用是发送Http请求的,Fiegn中携带Token到另一个服务去,需要配置一个Fegin的配置类完成此操作

三、使用步骤

1.创建一个FeginClient的配置类

Java代码如下(示例):

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
 
/**
 * @author : 胡浩
 * @version 1.0
 * @description: 描述
 * @date 2022/11/15 18:37
 */
@Configuration
public class FeignConfig implements RequestInterceptor {
 
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        requestTemplate.header("token", request.getHeader("token"));
    }
}

2.在@FeginClient注解中添加Configuration属性

import com.trkj.common.vo.AjaxResponse;
import com.trkj.config.FeignConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
 
@FeignClient(value = "news-comment",configuration = FeignConfig.class)
public interface CommentService {
    @GetMapping("/comment/lookComment/{newsId}")
    AjaxResponse lookComment(@PathVariable("newsId") Integer newsId);
}

总结

以上就是OpenFegin在服务之间通讯中,携带token的实现方法了。其实挺简单的,就两步。

你可能感兴趣的:(spring,cloud,微服务,spring,分布式)