在@Async 开启的线程里怎么获取调用bear token
时间: 2024-03-20 19:45:35 浏览: 73
# 线程.bearnote
在使用Spring进行异步处理时,如果需要在异步线程中获取调用方的Bearer Token,可以使用ThreadLocal来实现。
首先,在调用方的代码中,将Bearer Token存储在一个ThreadLocal变量中:
```
public class MyController {
private static final ThreadLocal<String> bearerToken = new ThreadLocal<>();
// 处理请求的方法
public String handleRequest(HttpServletRequest request) {
String token = request.getHeader("Authorization");
bearerToken.set(token);
// 调用异步方法
myService.myMethod();
// ...
}
// 获取Bearer Token的方法
public static String getBearerToken() {
return bearerToken.get();
}
}
```
然后,在异步方法中使用MyController.getBearerToken()方法来获取Bearer Token:
```
@Service
public class MyService {
@Async
public void myMethod() {
String token = MyController.getBearerToken();
// 在异步线程中使用Bearer Token
// ...
}
}
```
需要注意的是,由于ThreadLocal是线程安全的,在多线程环境下可以保证每个线程都有自己的变量副本。因此,在异步线程中使用ThreadLocal变量可以保证线程安全。
阅读全文