Srping Cloud - @Async注解+Feign手动设置token

在Spring cloud项目开发中,经常需要通过feign远程调用其他的服务的方法。有时因为跨服务调用的时间较长,就会存在需要异步跨服务调用的场景,此时就会出现请求头(主要是token)丢失的问题。

报错:
Full authentication is required to access this resource

一、项目场景

1 异步生成Excel文件
2 跨服务调用上传文件
3 返回文件id
4 回更业务表

思路:从request中获取token;再将token设置到上下文工具中

二、代码示例

1.工具类

基于ThreadLocal类封装的工具类,用于在同一线程中的封装数据和获取数据。

/**
* 上下文工具类
*/
public class BaseContextHandler {
   
   
    private static final ThreadLocal<Map<String, String>> THREAD_LOCAL = new ThreadLocal();

    public BaseContextHandler() {
   
   
    }
    public static void set(String key, Object value) {
   
   
        Map<String, String> map = getLocalMap();
        map.put(key, value == null ? "" : value.toString());
    }

    public static <T> T get(String key, Class<T> type) {
   
   
        Map<String, String> map = getLocalMap();
        return Convert.convert(type, map.get(key));
    }

    public static <T> T get(String key, Class<T> type, Object def) {
   
   
        Map<String, String> map = getLocalMap();
        return Convert.convert(type, map.getOrDefault(key, String.valueOf(def == null ? "" : def)));
    }

    public static String get(String key) {
   
   
        Map<String, String> map = getLocalMap();
        return (String)map.getOrDefault(key, "");
    }

    public static Map<String, String> 
posted @ 2024-07-16 16:36  御坂10027  阅读(0)  评论(0)    收藏  举报  来源