沙钢智慧能源系统后端代码
dengzedong
2024-12-06 7664fa0dbc023d192aeb94c7f2612e0fbe0e3cd7
IailabClient 配置
已修改2个文件
79 ■■■■■ 文件已修改
shasteel-biz/src/main/java/com/iailab/module/shasteel/config/FeignTokenInterceptor.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
shasteel-biz/src/main/java/com/iailab/module/shasteel/config/FeignTokenInterceptor.java
@@ -3,6 +3,7 @@
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;
@@ -11,6 +12,9 @@
@Configuration
public class FeignTokenInterceptor implements RequestInterceptor {
    @Autowired
    private IailabClient iailabClient;
    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 从当前请求上下文中获取Token
@@ -18,11 +22,11 @@
        if (token == null) {
            // 如果没有获取到Token,从system-server中获取token
            token = IailabClient.getToken();
            token = iailabClient.getToken();
            if (token!= null) {
                requestTemplate.header(HttpHeaders.AUTHORIZATION, token);
            }
            Long tenantId = IailabClient.getTenantId();
            Long tenantId = iailabClient.getTenantId();
            if (tenantId != null) {
                requestTemplate.header("tenant-id", String.valueOf(tenantId));
            }
shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java
@@ -1,11 +1,13 @@
package com.iailab.module.shasteel.util.token;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.Base64Utils;
import org.springframework.util.ObjectUtils;
@@ -20,25 +22,32 @@
 * @createTime 2024年11月21日
 */
@Slf4j
@Component
public class IailabClient {
    /**
     * 平台地址
     */
    public static String BASE_URL;
    @Value("${iailab.token.base-url}")
    private String BASE_URL;
    /**
     * 租户编号
     */
    public static Long TENANT_ID;
    @Value("${iailab.token.tenant-id}")
    private String TENANT_ID;
    /**
     * 客户端信息
     */
    private static String CLIENT_ID;
    private static String CLIENT_SECRET;
    private static String USERNAME;
    private static String PASSWORD;
    @Value("${iailab.token.client-id}")
    private String CLIENT_ID;
    @Value("${iailab.token.client-secret}")
    private String CLIENT_SECRET;
    @Value("${iailab.token.username}")
    private String USERNAME;
    @Value("${iailab.token.password}")
    private String PASSWORD;
    private static final String GRAND_TYPE = "password";
    private static final String SCOPE = "user.read user.write";
@@ -46,38 +55,16 @@
    private static final RestTemplate restTemplate = new RestTemplate();
    // 鉴权token
    public static String accessToken;
    private String accessToken;
    // 刷新token
    public static String refreshToken;
    private String refreshToken;
    // 鉴权token过期时间
    public static Long expireTime;
    private static final IailabClient iailabClient = new IailabClient();
    private IailabClient() {
//        BASE_URL = PlatApplicationContext.getProperty("iailab.baseUrl");
//        TENANT_ID = Long.parseLong(PlatApplicationContext.getProperty("iailab.tenantId"));
//        CLIENT_ID = PlatApplicationContext.getProperty("iailab.clientId");
//        CLIENT_SECRET = PlatApplicationContext.getProperty("iailab.clientSecret");
//        USERNAME = PlatApplicationContext.getProperty("iailab.username");
//        PASSWORD = PlatApplicationContext.getProperty("iailab.password");
        BASE_URL = "http://127.0.0.1:48080/admin-api/system";
        TENANT_ID = 176L;
        CLIENT_ID = "shasteel";
        CLIENT_SECRET = "shasteel111111111111111";
        USERNAME = "shasteel";
        PASSWORD = "123456";
    }
    public static IailabClient getInstance() {
        return iailabClient;
    }
    private Long expireTime;
    /**
     * 用户名密码方式获取平台token
     */
    private static synchronized void authenticate() {
    private synchronized void authenticate() {
        log.info("获取平台token");
        // 1.1 构建请求头
        HttpHeaders headers = new HttpHeaders();
@@ -104,7 +91,7 @@
        expireTime = Long.valueOf(authMap.get("expires_time").toString());
    }
    private static synchronized void refreshToken() {
    private synchronized void refreshToken() {
        log.info("刷新token");
        // 1.1 构建请求头
        HttpHeaders headers = new HttpHeaders();
@@ -133,26 +120,26 @@
        }
    }
    private static void addClientHeader(HttpHeaders headers) {
    private void addClientHeader(HttpHeaders headers) {
        // client 拼接,需要 BASE64 编码
        String client = CLIENT_ID + ":" + CLIENT_SECRET;
        client = Base64Utils.encodeToString(client.getBytes(StandardCharsets.UTF_8));
        headers.add("Authorization", "Basic " + client);
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.set("tenant-id", TENANT_ID.toString());
        headers.set("tenant-id", getTenantId().toString());
    }
    public static String getToken() {
    public String getToken() {
        //第一次请求或者token过期,需要重新获取token
        if(ObjectUtils.isEmpty(IailabClient.accessToken)) {
            IailabClient.authenticate();
        } else if (IailabClient.expireTime < System.currentTimeMillis() / 1000) {
            IailabClient.refreshToken();
        if(ObjectUtils.isEmpty(accessToken)) {
            authenticate();
        } else if (expireTime < System.currentTimeMillis() / 1000) {
            refreshToken();
        }
        
        return accessToken;
    }
    public static Long getTenantId() {
        return TENANT_ID;
    public Long getTenantId() {
        return Long.valueOf(TENANT_ID);
    }
}