From 9882627244a4758df2025721ab13e33a035a5088 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期五, 28 二月 2025 17:33:39 +0800
Subject: [PATCH] Merge branch 'master' of http://dlindusit.com:53929/r/iailab-plat

---
 sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 93 insertions(+), 0 deletions(-)

diff --git a/sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java b/sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
new file mode 100644
index 0000000..4ba282b
--- /dev/null
+++ b/sdk/src/main/java/com/iailab/sdk/auth/client/IailabAuthClient.java
@@ -0,0 +1,93 @@
+package com.iailab.sdk.auth.client;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.iailab.sdk.auth.client.dto.TokenDTO;
+import com.iailab.sdk.auth.client.vo.AuthLoginReqVO;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.*;
+
+/**
+ * @author Houzhongjian
+ * @Description
+ * @createTime 2025年02月18日
+ */
+@Component
+@Service
+public class IailabAuthClient {
+
+    /**
+     * 平台地址
+     */
+    public static String BASE_URL = "http://172.16.8.100:48080/admin-api";
+
+    /**
+     * 租户编号
+     */
+    public static String TENANT_ID = "1";
+
+    private static final RestTemplate restTemplate = new RestTemplate();
+
+    /**
+     * 用户名密码方式获取平台token
+     */
+    public static synchronized TokenDTO login(AuthLoginReqVO loginReqVO) throws Exception {
+        System.out.println("登录获取平台token");
+        ObjectMapper objectMapper = new ObjectMapper();
+        String paramString = objectMapper.writeValueAsString(loginReqVO);
+        // 1.1 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        addClientHeader(headers);
+        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
+        // 1.2 构建authenticate请求URL
+        String authenticateUrl = BASE_URL + "/system/auth/login";
+        // 2. 执行请求
+        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
+                authenticateUrl,
+                HttpMethod.POST,
+                new HttpEntity<>(paramString, headers),
+                new ParameterizedTypeReference<Map<String, Object>>() {
+                });
+        return handleResponse(exchange);
+    }
+
+    public static synchronized TokenDTO refreshToken(String refreshToken) {
+        System.out.println("刷新token");
+        // 1.1 构建请求头
+        HttpHeaders headers = new HttpHeaders();
+        addClientHeader(headers);
+        // 1.2 构建authenticate请求URL
+        String authenticateUrl = BASE_URL + "/system/auth/refresh-token?refreshToken=" + refreshToken;
+        // 2. 执行请求
+        ResponseEntity<Map<String, Object>> exchange = restTemplate.exchange(
+                authenticateUrl,
+                HttpMethod.POST,
+                new HttpEntity<>(headers),
+                new ParameterizedTypeReference<Map<String, Object>>() {
+                });
+        return handleResponse(exchange);
+    }
+
+    private static void addClientHeader(HttpHeaders headers) {
+        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+        headers.set("tenant-id", TENANT_ID);
+    }
+
+    // 统一处理响应
+    private static <T> TokenDTO handleResponse(ResponseEntity<T> response) {
+        Assert.isTrue(response.getStatusCode().is2xxSuccessful(), "响应必须是 200 成功");
+        System.out.println(response);
+        TokenDTO authTokenDTO = new TokenDTO();
+        Map<String, Object> authMap = (Map<String, Object>)response.getBody();
+        Map<String, Object> tokenData = (Map<String, Object>)authMap.get("data");
+        authTokenDTO.setAccessToken(tokenData.get("accessToken").toString());
+        authTokenDTO.setRefreshToken(tokenData.get("refreshToken").toString());
+        authTokenDTO.setExpiresTime(Long.valueOf(tokenData.get("expiresTime").toString()));
+        return authTokenDTO;
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3