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>

浙公网安备 33010602011771号