欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring微服务使用feign传递Token的简单示例

程序员文章站 2022-09-02 17:56:02
Spring微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息,代码实现逻辑:消费者Consumer微服务调用提供者Provider微服务,通过feign拦截器将请求头信息传递给提供者服务。...

Spring微服务之间使用feign的RequestInterceptor拦截器实现请求头传递当前登录用户信息,代码实现逻辑:消费者Consumer微服务调用提供者Provider微服务,通过feign拦截器将请求头信息传递给提供者服务。本文是在Spring微服务间登录用户信息共享思路Spring boot集成Nacos服务注册中心及发现与消费基础上的简单代码实现。

一、提供者服务

在HelloController类中新增testHeader方法:获取header传递的Access-Token参数

@RequestMapping("/testHeader")
	public String testHeader(@RequestHeader HttpHeaders headers){
		String token = "";
		List<String> tokenList = headers.get("Access-Token");
		if(tokenList.size()==1) {
			token = tokenList.get(0);
			System.out.println("Access-Token is "+token);
		}
		return String.format("Hello, the head messge [%s] come from %s, port is %s!", token, applicationName, serverPort);
	}

通过postman访问服务正常,如下:
Spring微服务使用feign传递Token的简单示例

二、消费者服务

通过feign拦截器实现将消费者请求头信息传递给提供者服务。

1、新增FeignConfig类

@Configuration
public class FeignConfig implements RequestInterceptor {
	@Override
    public void apply(RequestTemplate requestTemplate) {
		System.out.println("FeignConfig - apply");
        ServletRequestAttributes attributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
        if (attributes != null) {
            HttpServletRequest request = attributes.getRequest();
            requestTemplate.header("Access-Token", request.getHeader("Access-Token"));
            System.out.println("FeignConfig - Access-Token: "+request.getHeader("Access-Token"));
        }
    }

}

2、ConsumerController新增test方法

@RequestMapping("/test-customer")
	public String test() {
		String result = hfc.testHeader();
		System.out.println("ConsumerController.test(): "+result);
		return "this is FeignResult:" + result;
	}

3、HelloFeignClient新增testHeader方法

@FeignClient("provide-nacos-service")
public interface HelloFeignClient {
	
	@RequestMapping("/hello")
	String helloWorld();
	
	@RequestMapping("/testHeader")
	String testHeader();

}

三、运行结果

postman:
Spring微服务使用feign传递Token的简单示例
消费者服务控制台:
Spring微服务使用feign传递Token的简单示例
提供者服务控制台:
Spring微服务使用feign传递Token的简单示例

本文地址:https://blog.csdn.net/weixin_44153121/article/details/110792341