package com.iailab.module.shasteel.config;
|
|
import com.iailab.module.shasteel.util.token.IailabClient;
|
import feign.RequestInterceptor;
|
import feign.RequestTemplate;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
|
@Configuration
|
public class FeignTokenInterceptor implements RequestInterceptor {
|
|
@Autowired
|
private IailabClient iailabClient;
|
|
@Override
|
public void apply(RequestTemplate requestTemplate) {
|
// 从当前请求上下文中获取Token
|
String token = getTokenFromCurrentRequest();
|
|
if (token == null) {
|
// 如果没有获取到Token,从system-server中获取token
|
token = iailabClient.getToken();
|
if (token!= null) {
|
requestTemplate.header(HttpHeaders.AUTHORIZATION, token);
|
}
|
Long tenantId = iailabClient.getTenantId();
|
if (tenantId != null) {
|
requestTemplate.header("tenant-id", String.valueOf(tenantId));
|
}
|
}
|
}
|
|
private String getTokenFromCurrentRequest() {
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
if (attributes!= null) {
|
return attributes.getRequest().getHeader(HttpHeaders.AUTHORIZATION);
|
}
|
return null;
|
}
|
}
|