//主线程的context
final SecurityContext context = SecurityContextHolder.getContext();
final RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//异步线程新设置一个请求
RequestContextHolder.setRequestAttributes(requestAttributes);
//在异步线程中创建一个空的SecurityContext,然后再把主线程的context赋值进去
SecurityContext emptyContext = SecurityContextHolder.createEmptyContext();
emptyContext.setAuthentication(context.getAuthentication());
SecurityContextHolder.setContext(emptyContext);
@Component
public class FeignInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if(requestAttributes != null){
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
String authorization = request.getHeader("Authorization");
template.header("Authorization", authorization);
if (TenantContextHolder.getTenantId() == null) {
return;
}
template.header(CommonConstants.TENANT_ID, TenantContextHolder.getTenantId().toString());
}
}
}