Quellcode durchsuchen

refactor(util):优化AES加解密工具类和HTTP请求工具类

- 引入ConnectivityConstants静态导入,简化密钥和IV的引用- 更新main方法实现,使用常量进行解密测试并注释原有代码块
-修正OkHttpUtil中的Content-Type头部设置逻辑
- 添加@Slf4j注解以支持日志记录- 注释掉旧的doPostForm实现,保留新的表单数据POST请求方法- 移除URL路径中多余的"/evcs/v1"前缀,统一接口地址格式
SheepHy vor 4 Wochen
Ursprung
Commit
804ee22963

+ 14 - 14
src/main/java/com/zsElectric/boot/common/constant/ConnectivityConstants.java

@@ -63,72 +63,72 @@ public interface ConnectivityConstants {
     /**
      * 平台测试域名
      * */
-    String TEST_DOMAIN = "https://parking-test.gyzhtc.com/energy-interconnection/evcs/v1.1/1/MA6DP6BE7/";
+    String TEST_DOMAIN = "https://parking-test.gyzhtc.com/energy-interconnection/evcs/v1.1/1/MA6DP6BE7";
 
     /**
      * 获取Token
      * */
-    String QUERY_TOKEN = "/evcs/v1/query_token";
+    String QUERY_TOKEN = "/query_token";
 
     /**
      * 查询充电站信息
      */
-    String QUERY_STATIONS_INFO = "/evcs/v1/query_stations_info";
+    String QUERY_STATIONS_INFO = "/query_stations_info";
 
     /**
      * 设备状态变化推送
      */
-    String NOTIFICATION_STATIONSTATUS = "/evcs/v1/notification_stationStatus";
+    String NOTIFICATION_STATIONSTATUS = "/notification_stationStatus";
 
     /**
      * 设备接口状态查询 (选接)
      */
-    String QUERY_STATION_STATUS = "/evcs/v1/query_station_status";
+    String QUERY_STATION_STATUS = "/query_station_status";
 
     /**
      * 查询业务策略信息
      * */
-    String QUERY_EQUIP_BUSINESS_POLICY = "/evcs/v1/query_equip_business_policy";
+    String QUERY_EQUIP_BUSINESS_POLICY = "/query_equip_business_policy";
 
     /**
      * 请求设备认证
      * */
-    String QUERY_EQUIP_AUTH = "/evcs/v1/query_equip_auth";
+    String QUERY_EQUIP_AUTH = "/query_equip_auth";
 
     /**
      * 请求启动充电
      * */
-    String QUERY_START_CHARGE = "/evcs/v1/query_start_charge";
+    String QUERY_START_CHARGE = "/query_start_charge";
 
     /**
      * 推送启动充电结果
      * */
-    String NOTIFICATION_START_CHARGE_RESULT = "/evcs/v1/notification_start_charge_result";
+    String NOTIFICATION_START_CHARGE_RESULT = "/notification_start_charge_result";
 
     /**
      * 查询充电状态
      * */
-    String QUERY_EQUIP_CHARGE_STATUS = "/evcs/v1/query_equip_charge_status";
+    String QUERY_EQUIP_CHARGE_STATUS = "/query_equip_charge_status";
 
     /**
      * 推送充电状态
      * */
-    String NOTIFICATION_EQUIP_CHARGE_STATUS = "/evcs/v1/notification_equip_charge_status";
+    String NOTIFICATION_EQUIP_CHARGE_STATUS = "/notification_equip_charge_status";
 
     /**
      * 请求停止充电
      * */
-    String QUERY_STOP_CHARGE = "/evcs/v1/query_stop_charge";
+    String QUERY_STOP_CHARGE = "/query_stop_charge";
 
     /**
      * 推送停止充电结果
      * */
-    String NOTIFICATION_STOP_CHARGE_RESULT = "/evcs/v1/notification_stop_charge_result";
+    String NOTIFICATION_STOP_CHARGE_RESULT = "/notification_stop_charge_result";
 
     /**
      * 推送充电订单信息
      * */
-    String NOTIFICATION_CHARGE_ORDER_INFO = "/evcs/v1/notification_charge_order_info";
+    String NOTIFICATION_CHARGE_ORDER_INFO = "/notification_charge_order_info";
 
 
 

+ 67 - 61
src/main/java/com/zsElectric/boot/common/util/AESCryptoUtil.java

@@ -6,6 +6,8 @@ import javax.crypto.spec.SecretKeySpec;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 
+import static com.zsElectric.boot.common.constant.ConnectivityConstants.*;
+
 /**
  * AES加解密工具类
  * 支持AES-128-CBC-PKCS5Padding对称加解密算法
@@ -135,66 +137,70 @@ public class AESCryptoUtil {
     /**
      * 测试方法
      */
-    public static void main(String[] args) {
-        try {
-            // 测试数据
-            String originalData = "{\n" +
-                    "    \"total\": 1,\n" +
-                    "    \"stationStatusInfo\": {\n" +
-                    "        \"operationlD\": \"123456789\",\n" +
-                    "        \"stationlD\": \"111111111111111\",\n" +
-                    "        \"connectorStatusInfos\":{\"connectorD\":1,\"equipmentD\":\"10000000000000000000001\",\n" +
-                    "        \"status\":4,\n" +
-                    "        \"curentA\":0,\n" +
-                    "        \"currentB\":0,\n" +
-                    "        \"curentC\":0,\n" +
-                    "        \"voltageA\":0,\n" +
-                    "        \"voltageB\":0,\n" +
-                    "        \"voltageC\":0,\n" +
-                    "        \"soc\":10\n" +
-                    "        }\n" +
-                    "    }\n" +
-                    "}";
-            String key = "1234567890abcdef";   // 16字节密钥
-            String iv = "1234567890abcdef";   // 16字节初始化向量
-            
-            System.out.println("=== AES-128-CBC-PKCS5Padding 加解密测试 ===");
-            System.out.println("原始数据: " + originalData);
-            System.out.println("密钥: " + key);
-            System.out.println("初始化向量: " + iv);
-            
-            // 加密
-            long startTime = System.currentTimeMillis();
-            String encryptedData = encrypt(originalData, key, iv);
-            long encryptTime = System.currentTimeMillis() - startTime;
-            System.out.println("加密结果: " + encryptedData);
-            System.out.println("加密耗时: " + encryptTime + "ms");
-            
-            // 解密
-            startTime = System.currentTimeMillis();
-            String decryptedData = decrypt(encryptedData, key, iv);
-            long decryptTime = System.currentTimeMillis() - startTime;
-            System.out.println("解密结果: " + decryptedData);
-            System.out.println("解密耗时: " + decryptTime + "ms");
-            
-            // 验证加解密一致性
-            boolean isSuccess = originalData.equals(decryptedData);
-            System.out.println("加解密验证: " + (isSuccess ? "成功" : "失败"));
-            
-            // 测试随机密钥生成
-            System.out.println("\n=== 随机密钥生成测试 ===");
-            String randomKey = generateRandomKey();
-            String randomIV = generateRandomIV();
-            System.out.println("随机密钥: " + randomKey);
-            System.out.println("随机IV: " + randomIV);
-            
-            // 使用随机密钥进行加解密测试
-            String testEncrypted = encrypt("测试数据", randomKey, randomIV);
-            String testDecrypted = decrypt(testEncrypted, randomKey, randomIV);
-            System.out.println("随机密钥加解密测试: " + ("测试数据".equals(testDecrypted) ? "成功" : "失败"));
-            
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+    public static void main(String[] args) throws Exception {
+        String decryptedData = decrypt("B3eJFJNOlN7ubFMoxqAxVg==",
+                DATA_SECRET,
+                DATA_SECRET_IV);
+        System.out.println("解密结果: " + decryptedData);
+//        try {
+//            // 测试数据
+//            String originalData = "{\n" +
+//                    "    \"total\": 1,\n" +
+//                    "    \"stationStatusInfo\": {\n" +
+//                    "        \"operationlD\": \"123456789\",\n" +
+//                    "        \"stationlD\": \"111111111111111\",\n" +
+//                    "        \"connectorStatusInfos\":{\"connectorD\":1,\"equipmentD\":\"10000000000000000000001\",\n" +
+//                    "        \"status\":4,\n" +
+//                    "        \"curentA\":0,\n" +
+//                    "        \"currentB\":0,\n" +
+//                    "        \"curentC\":0,\n" +
+//                    "        \"voltageA\":0,\n" +
+//                    "        \"voltageB\":0,\n" +
+//                    "        \"voltageC\":0,\n" +
+//                    "        \"soc\":10\n" +
+//                    "        }\n" +
+//                    "    }\n" +
+//                    "}";
+//            String key = "1234567890abcdef";   // 16字节密钥
+//            String iv = "1234567890abcdef";   // 16字节初始化向量
+//
+//            System.out.println("=== AES-128-CBC-PKCS5Padding 加解密测试 ===");
+//            System.out.println("原始数据: " + originalData);
+//            System.out.println("密钥: " + key);
+//            System.out.println("初始化向量: " + iv);
+//
+//            // 加密
+//            long startTime = System.currentTimeMillis();
+//            String encryptedData = encrypt(originalData, key, iv);
+//            long encryptTime = System.currentTimeMillis() - startTime;
+//            System.out.println("加密结果: " + encryptedData);
+//            System.out.println("加密耗时: " + encryptTime + "ms");
+//
+//            // 解密
+//            startTime = System.currentTimeMillis();
+//            String decryptedData = decrypt(encryptedData, key, iv);
+//            long decryptTime = System.currentTimeMillis() - startTime;
+//            System.out.println("解密结果: " + decryptedData);
+//            System.out.println("解密耗时: " + decryptTime + "ms");
+//
+//            // 验证加解密一致性
+//            boolean isSuccess = originalData.equals(decryptedData);
+//            System.out.println("加解密验证: " + (isSuccess ? "成功" : "失败"));
+//
+//            // 测试随机密钥生成
+//            System.out.println("\n=== 随机密钥生成测试 ===");
+//            String randomKey = generateRandomKey();
+//            String randomIV = generateRandomIV();
+//            System.out.println("随机密钥: " + randomKey);
+//            System.out.println("随机IV: " + randomIV);
+//
+//            // 使用随机密钥进行加解密测试
+//            String testEncrypted = encrypt("测试数据", randomKey, randomIV);
+//            String testDecrypted = decrypt(testEncrypted, randomKey, randomIV);
+//            System.out.println("随机密钥加解密测试: " + ("测试数据".equals(testDecrypted) ? "成功" : "失败"));
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
     }
 }

+ 37 - 2
src/main/java/com/zsElectric/boot/common/util/OkHttpUtil.java

@@ -4,12 +4,15 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Component
 public class OkHttpUtil {
     private final OkHttpClient okHttpClient;
@@ -69,9 +72,36 @@ public class OkHttpUtil {
     /**
      * 执行 POST 请求(表单数据),返回 JsonObject
      */
+//    public JsonObject doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) throws IOException {
+//        FormBody.Builder formBodyBuilder = new FormBody.Builder();
+//        if (formData != null) {
+//            formData.forEach((k, v) -> formBodyBuilder.add(k, String.valueOf(v)));
+//        }
+//
+//        Request.Builder requestBuilder = new Request.Builder()
+//                .url(url)
+//                .addHeader("Content-Type", "application/json; charset=utf-8")
+//                .post(formBodyBuilder.build());
+//
+//        if (MapUtil.isNotEmpty(headers)) {
+//            headers.forEach(requestBuilder::addHeader);
+//        }
+//
+//        Request request = requestBuilder.build();
+//        request.header("Content-Type:application/json; charset=utf-8");
+//        log.info("POST 请求 URL: " + url);
+//        log.info("POST 请求表单数据: " + formData);
+//        try (Response response = okHttpClient.newCall(request).execute()) {
+//            if (!response.isSuccessful()) {
+//                throw new IOException("Unexpected code: " + response);
+//            }
+//            String responseBody = response.body().string();
+//            return JsonParser.parseString(responseBody).getAsJsonObject();
+//        }
+//    }
+
     public JsonObject doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) throws IOException {
         FormBody.Builder formBodyBuilder = new FormBody.Builder();
-
         if (formData != null) {
             formData.forEach((k, v) -> formBodyBuilder.add(k, String.valueOf(v)));
         }
@@ -80,12 +110,17 @@ public class OkHttpUtil {
                 .url(url)
                 .post(formBodyBuilder.build());
 
+        // 正确设置 Content-Type header
         if (MapUtil.isNotEmpty(headers)) {
             headers.forEach(requestBuilder::addHeader);
         }
 
-        Request request = requestBuilder.build();
+        // 如果需要覆盖 Content-Type,应该在这里设置
+        requestBuilder.addHeader("Content-Type", "application/json");
 
+        Request request = requestBuilder.build();
+        log.info("POST 请求 URL: " + url);
+        log.info("POST 请求表单数据: " + formData);
         try (Response response = okHttpClient.newCall(request).execute()) {
             if (!response.isSuccessful()) {
                 throw new IOException("Unexpected code: " + response);