From 3fb49196d6df5da332d8fafcd0a57bc383724938 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 12 八月 2025 14:49:20 +0800
Subject: [PATCH] 浪潮对接单点登录:配置调整

---
 src/main/java/com/ruoyi/tide/utils/TideUtils.java |  172 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 172 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/tide/utils/TideUtils.java b/src/main/java/com/ruoyi/tide/utils/TideUtils.java
new file mode 100644
index 0000000..4cac75a
--- /dev/null
+++ b/src/main/java/com/ruoyi/tide/utils/TideUtils.java
@@ -0,0 +1,172 @@
+package com.ruoyi.tide.utils;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.crypto.digest.HMac;
+import cn.hutool.crypto.digest.HmacAlgorithm;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.HashMap;
+
+@Data
+@Component
+@Slf4j
+public class TideUtils {
+    private final static String appId = "19472937-3039-4bf1-8334-13dc20e076e5";
+
+    private final static String appSecret = "b57bbad60724f810e7bb7e1e7b8791b63eba50e50faef6fa819ade822fac9e4a";
+
+    // 鍐呯綉鍦板潃
+    private final static String ip = "http://58.56.84.138:8083";
+
+    // MD5鍔犲瘑骞惰浆鎹负16杩涘埗
+    public static String md5Encryption(String input) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] digest = md.digest(input.getBytes());
+            StringBuilder sb = new StringBuilder();
+            for (byte b : digest) {
+                sb.append(String.format("%02x", b & 0xff));
+            }
+            return sb.toString();
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    // get璇锋眰
+    public static HashMap<String, String> getGetHeader(String parameter) {
+        // 鏃堕棿鎴�
+        String xTime = String.valueOf(DateUtil.current());
+        // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+        String xRandom = RandomUtil.randomString(16);
+        String xSignSplicingTogether;
+        // 鏈夊弬鏁�
+        if (ObjectUtils.isNotEmpty(parameter)) {
+            // 鍔犲瘑寰楀嚭x-body
+            String xBody = md5Encryption(parameter);
+            // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+        // 鏃犲弬鏁�
+        } else {
+            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+        }
+        // 閰嶇疆鍔犲瘑鏂瑰紡涓庡瘑閽�
+        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+        // 寰楀嚭x-sign
+        String xSign = hMac.digestHex(xSignSplicingTogether);
+        HashMap<String, String> result = new HashMap<>();
+        result.put("x-time", xTime);
+        result.put("x-random", xRandom);
+        result.put("x-sign", xSign);
+        result.put("appKey", appId);
+        return result;
+    }
+
+    // post璇锋眰
+    public static HashMap<String, String> getPostHeader(String parameter) {
+        // 鏃堕棿鎴�
+        String xTime = String.valueOf(DateUtil.current());
+        // 鑾峰彇闅忔満16浣嶅瓧绗︿覆
+        String xRandom = RandomUtil.randomString(16);
+        String xSignSplicingTogether;
+        // 鏈夊弬鏁�
+        if (ObjectUtils.isNotEmpty(parameter)) {
+            // 鍔犲瘑寰楀嚭x-body
+            String xBody = md5Encryption(parameter);
+            // 涓簒-sign鍔犲瘑鍋氭嫾鎺�
+            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
+            // 鏃犲弬鏁�
+        } else {
+            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
+        }
+        // x-sign 鍔犲瘑
+        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, appSecret.getBytes());
+        String xSign = hMac.digestHex(xSignSplicingTogether);
+        HashMap<String, String> result = new HashMap<>();
+        result.put("x-time", xTime);
+        result.put("x-random", xRandom);
+        result.put("x-sign", xSign);
+        result.put("appKey", appId);
+        return result;
+    }
+
+    /**
+     * 浜斿垎閽熶竴娆$殑蹇冭烦
+     */
+//    @Scheduled(cron = "0 0/5 * * * ?")
+    public static void heartbeat(){
+        HashMap<String, String> header = getGetHeader(null);
+        String url = ip + "/cpn/api/extra/v1/application/heartbeat";
+        String body = HttpRequest.get(url).headerMap(header, false).execute().body();
+        System.out.println(body + "=======MES蹇冭烦鎵ц鎴愬姛锛�");
+    }
+
+    // 鑾峰彇token
+    public static String getToken(String code) {
+        String url = ip + "/cpn/extral/applicationCode/appAuthCheck";
+        JSONObject json = new JSONObject();
+        json.put("code", code);
+        json.put("appID", appId);
+        json.put("appSecret", appSecret);
+        HashMap<String, String> header = getPostHeader(json.toString());
+        String body = HttpRequest.post(url)
+                .headerMap(header, false)
+                .body(json.toString())
+                .execute().body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        return jsonObject.get("data").toString();
+    }
+
+    // 鑾峰彇鐢ㄦ埛淇℃伅
+    public static JSONObject getUserInfo(String token) {
+        String url = ip + "/cpn/api/extral/applicationCode/getUserInfoByToken";
+        JSONObject json = new JSONObject();
+        json.put("appID", appId);
+        HashMap<String, String> header = getPostHeader(json.toString());
+        header.put("Authorization", token);
+        String body = HttpRequest.post(url)
+                .headerMap(header, false)
+                .body(json.toString())
+                .execute().body();
+        JSONObject jsonObject = JSONObject.parseObject(body);
+        return JSONObject.parseObject(jsonObject.get("data").toString());
+    }
+
+    public static JSONObject getResult(Integer code, String msg, Object data) {
+        JSONObject json = new JSONObject();
+        json.put("code", code);
+        json.put("msg", msg);
+        json.put("data", data);
+        String xRandom = RandomUtil.randomString(16);
+        json.put("traceId", xRandom);
+        return json;
+    }
+
+    public static String getRandomString(int length) {
+        SecureRandom random = new SecureRandom();
+        String uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+        String lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
+        String numbers = "0123456789";
+        String specialCharacters = "!@$%^&*()_+-=.";
+        String characterSet = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
+        StringBuilder passwordBuilder = new StringBuilder();
+
+        for (int i = 0; i < length; i++) {
+            int randomIndex = random.nextInt(characterSet.length());
+            char randomChar = characterSet.charAt(randomIndex);
+            passwordBuilder.append(randomChar);
+        }
+
+        return passwordBuilder.toString();
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3