From 8766cfc344d3635cd7e50a7c674cd5feb54d5a3d Mon Sep 17 00:00:00 2001
From: liriming <1343021927@qq.com>
Date: 星期一, 02 十二月 2024 09:30:35 +0800
Subject: [PATCH] 预警mq监听并发送

---
 shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java |  158 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 158 insertions(+), 0 deletions(-)

diff --git a/shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java b/shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java
new file mode 100644
index 0000000..fe3fcc5
--- /dev/null
+++ b/shasteel-biz/src/main/java/com/iailab/module/shasteel/util/token/IailabClient.java
@@ -0,0 +1,158 @@
+package com.iailab.module.shasteel.util.token;
+
+import lombok.extern.slf4j.Slf4j;
+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.util.Assert;
+import org.springframework.util.Base64Utils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+
+/**
+ * @author PanZhibao
+ * @Description
+ * @createTime 2024年11月21日
+ */
+@Slf4j
+public class IailabClient {
+
+    /**
+     * 平台地址
+     */
+    public static String BASE_URL;
+
+    /**
+     * 租户编号
+     */
+    public static Long TENANT_ID;
+
+    /**
+     * 客户端信息
+     */
+    private static String CLIENT_ID;
+    private static String CLIENT_SECRET;
+    private static String USERNAME;
+    private static String PASSWORD;
+    private static final String GRAND_TYPE = "password";
+    private static final String SCOPE = "user.read user.write";
+
+
+    private static final RestTemplate restTemplate = new RestTemplate();
+
+    // 鉴权token
+    public static String accessToken;
+    // 刷新token
+    public static 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 = 172L;
+        CLIENT_ID = "shasteel";
+        CLIENT_SECRET = "shasteel111111111111111";
+        USERNAME = "shasteel";
+        PASSWORD = "123456";
+    }
+
+    public static IailabClient getInstance() {
+        return iailabClient;
+    }
+
+    /**
+     * 用户名密码方式获取平台token
+     */
+    private static synchronized void authenticate() {
+        log.info("获取平台token");
+        // 1.1 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        addClientHeader(headers);
+        // 1.2 构建authenticate请求URL
+        String authenticateUrl = BASE_URL + "/oauth2/token?"
+                // 密码模式的参数
+                + "grant_type=" + GRAND_TYPE
+                + "&username=" + USERNAME
+                + "&password=" + PASSWORD
+                + "&scope=" + SCOPE;
+        // 2. 执行请求
+        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
+                authenticateUrl,
+                HttpMethod.POST,
+                new org.springframework.http.HttpEntity<>(headers),
+                new ParameterizedTypeReference<Map<String, Object>>() {
+                });
+        Assert.isTrue(exchange.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
+        log.info(exchange.toString());
+        Map<String, Object> authMap = exchange.getBody();
+        accessToken = authMap.get("access_token").toString();
+        refreshToken = authMap.get("refresh_token").toString();
+        expireTime = Long.valueOf(authMap.get("expires_time").toString());
+    }
+
+    private static synchronized void refreshToken() {
+        log.info("刷新token");
+        // 1.1 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        addClientHeader(headers);
+        // 1.2 构建authenticate请求URL
+        String authenticateUrl = BASE_URL + "/system/auth/client-refresh-token?refreshToken=" + refreshToken
+                + "&clientId=" + CLIENT_ID;
+        // 2. 执行请求
+        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
+                authenticateUrl,
+                HttpMethod.POST,
+                new org.springframework.http.HttpEntity<>(headers),
+                new ParameterizedTypeReference<Map<String, Object>>() {
+                });
+        Assert.isTrue(exchange.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
+        Map<String, Object> authMap = exchange.getBody();
+        //刷新token过期,重新获取token
+        if (!ObjectUtils.isEmpty(authMap.get("code"))) {
+            Integer code = Integer.valueOf(authMap.get("code").toString());
+            if (code == 401) {
+                authenticate();
+            }
+        } else {
+            accessToken = authMap.get("access_token").toString();
+            expireTime = Long.valueOf(authMap.get("expires_time").toString());
+        }
+    }
+
+    private static 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());
+    }
+
+    public static String getToken() {
+        //第一次请求或者token过期,需要重新获取token
+        if(ObjectUtils.isEmpty(IailabClient.accessToken)) {
+            IailabClient.authenticate();
+        } else if (IailabClient.expireTime < System.currentTimeMillis() / 1000) {
+            IailabClient.refreshToken();
+        }
+        
+        return accessToken;
+    }
+    public static Long getTenantId() {
+        return TENANT_ID;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3