From 2769f76fc45645641cf5c30314ed1c2837f8fdb1 Mon Sep 17 00:00:00 2001
From: liwenxuan <1298531568@qq.com>
Date: Thu, 29 Jan 2026 09:04:44 +0800
Subject: [PATCH] =?UTF-8?q?sm4=E5=92=8Cmd5=20=E5=8A=A0=E8=A7=A3=E5=AF=86?=
=?UTF-8?q?=20=E9=80=82=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 17 +
.../config/PublicConfig.java | 74 ++--
.../controller/CompanyController.java | 11 +-
.../controller/IdentityVerifyController.java | 38 +-
.../controller/PageController.java | 7 +-
.../controller/UserController.java | 6 +-
.../service/impl/CompanyServiceImpl.java | 26 +-
.../impl/DepositoryRecordServiceImpl.java | 3 +
.../utils/sm4/ApiResponse.java | 32 ++
.../utils/sm4/DecryptedArgumentResolver.java | 45 +++
.../utils/sm4/DecryptedBody.java | 9 +
.../utils/sm4/EncryptedRequest.java | 20 +
.../utils/sm4/EncryptedResponseAdvice.java | 113 ++++++
.../utils/sm4/ErrorCode.java | 33 ++
.../utils/sm4/GlobalExceptionHandler.java | 22 ++
.../utils/sm4/GoApiClient.java | 372 ++++++++++++++++++
.../utils/sm4/GoMd5EncryptionUtil.java | 69 ++++
.../utils/sm4/RandomStringUtil.java | 47 +++
.../utils/sm4/SM4Interceptor.java | 98 +++++
.../depository_manage/utils/sm4/SM4Utils.java | 217 ++++++++++
.../utils/sm4/WebConfig.java | 40 ++
src/main/resources/application-prod.yml | 15 +-
22 files changed, 1245 insertions(+), 69 deletions(-)
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/ApiResponse.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedArgumentResolver.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedBody.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedRequest.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedResponseAdvice.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/ErrorCode.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/GlobalExceptionHandler.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/GoApiClient.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/GoMd5EncryptionUtil.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/RandomStringUtil.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/SM4Interceptor.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/SM4Utils.java
create mode 100644 src/main/java/com/dreamchaser/depository_manage/utils/sm4/WebConfig.java
diff --git a/pom.xml b/pom.xml
index 9b3f73c..b32ade5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -266,6 +266,23 @@
spring-boot-starter-webflux
+
+ com.alibaba.fastjson2
+ fastjson2
+ 2.0.46
+
+
+
+ org.bouncycastle
+ bcprov-jdk15to18
+ 1.76
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
+
diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
index 7f141fa..8142849 100644
--- a/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
+++ b/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java
@@ -8,8 +8,9 @@ import com.dreamchaser.depository_manage.entity.Post;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.utils.HttpUtils;
-import com.dreamchaser.depository_manage.utils.Md5;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
+import com.dreamchaser.depository_manage.utils.sm4.GoMd5EncryptionUtil;
import lombok.Data;
import org.apache.http.protocol.HTTP;
@@ -24,6 +25,7 @@ import java.util.concurrent.TimeUnit;
*/
@Data
public class PublicConfig {
+ private static GoApiClient goApiClient = new GoApiClient();
// 部署数据库 depository NhE47edekBHxhjYk
@@ -84,7 +86,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -124,7 +126,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -162,6 +164,10 @@ public class PublicConfig {
*/
public static Map getWaiKeyNumber(){
+ /*
+
+ * */
+
String url = "http://172.20.2.87:39168/empower/gaintoken";
Map map = new HashMap<>();
@@ -184,7 +190,7 @@ public class PublicConfig {
String codeString = data.get("number").toString();
String token = data.get("token").toString();
- String appKey = "luquan_hr";
+ /*String appKey = "luquan_hr";
String one1 = Md5.crypt(codeString);
String one2 = Md5.crypt(appKey);
@@ -197,7 +203,9 @@ public class PublicConfig {
String therr = Md5.crypt(two);
System.out.println("therr");
System.out.println(therr);
- String number = therr;
+ String number = therr;*/
+ GoMd5EncryptionUtil util = new GoMd5EncryptionUtil();
+ String number = util.md5EncryptionAlgorithm(codeString);
Map map1 = new HashMap<>();
map1.put("token",token);
map1.put("number",number);
@@ -224,7 +232,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send2(url, paramObject, HTTP.UTF_8, TokenNumberMap.get("token"), TokenNumberMap.get("number"));
+ post = goApiClient.send2(url, paramObject, HTTP.UTF_8, TokenNumberMap.get("token"), TokenNumberMap.get("number"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -251,7 +259,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -264,13 +272,19 @@ public class PublicConfig {
map.put("id", mainPortId);
map.put("idstr", String.valueOf(mainPortId));
String jsonString = JSONObject.toJSONString(map);
- String s = HttpUtils.doPost(url, jsonString);
- JSONObject jsonObject = JSONObject.parseObject(s);
+ JSONObject paramObject = JSONObject.parseObject(jsonString);
+ String post = null;
+ try {
+ Map TokenNumberMap = getWaiKeyNumber();
+ post = goApiClient.send2(url, paramObject, HTTP.UTF_8, TokenNumberMap.get("token"), TokenNumberMap.get("number"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = jsonObject.getJSONObject("data");
return data;
}
-
/**
* 通过工号获取用户
*
@@ -282,8 +296,15 @@ public class PublicConfig {
Map map = new HashMap<>();
map.put("number", number);
String jsonString = JSONObject.toJSONString(map);
- String s = HttpUtils.doPost(url, jsonString);
- JSONObject jsonObject = JSONObject.parseObject(s);
+ JSONObject paramObject = JSONObject.parseObject(jsonString);
+ String post = null;
+ try {
+ Map TokenNumberMap = getWaiKeyNumber();
+ post = goApiClient.send2(url, paramObject, HTTP.UTF_8, TokenNumberMap.get("token"), TokenNumberMap.get("number"));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = jsonObject.getJSONObject("data");
JSONArray list = data.getJSONArray("list");
UserByPort userByPort = null;
@@ -349,7 +370,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -383,8 +404,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
-
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -414,8 +434,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
-
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -448,7 +467,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -474,7 +493,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -508,8 +527,11 @@ public class PublicConfig {
String url = external_url_6666 + "/base/captcha";
JSONObject param = new JSONObject();
String post = null;
+
try {
- post = HttpUtils.send(url, param, HTTP.UTF_8, userKey, token);
+ // 使用GoApiClient发送加密请求
+ post = goApiClient.callGoApi(url, param, userKey, token);
+ System.out.println("post:"+post.toString());
} catch (IOException e) {
e.printStackTrace();
}
@@ -534,7 +556,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -574,13 +596,12 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
return (JSONArray) jsonObject.get("data");
-
}
/**
@@ -599,7 +620,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -624,7 +645,7 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, userToken);
+ post = goApiClient.callGoApi(url, paramObject, userKey, userToken);
} catch (IOException e) {
e.printStackTrace();
}
@@ -645,7 +666,8 @@ public class PublicConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, null, null);
+ Map TokenNumberMap = getWaiKeyNumber();
+ post = goApiClient.send2(url, paramObject, HTTP.UTF_8, TokenNumberMap.get("token"), TokenNumberMap.get("number"));
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
index 47c1e24..650d4a8 100644
--- a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
+++ b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
@@ -9,7 +9,7 @@ import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.*;
-import org.apache.http.protocol.HTTP;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -43,8 +43,7 @@ public class CompanyController {
@Autowired
private PostService postService;
-
-
+ private static GoApiClient goApiClient = new GoApiClient();
/**
* 查询组织架构
@@ -79,7 +78,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8,key, token);
+ post = goApiClient.callGoApi(url, paramObject, key, token);
} catch (IOException e) {
e.printStackTrace();
}
@@ -165,7 +164,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, key,token);
+ post = goApiClient.callGoApi(url, paramObject, key, token);
} catch (IOException e) {
e.printStackTrace();
}
@@ -208,7 +207,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, key,token);
+ post = goApiClient.callGoApi(url, paramObject, key, token);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/IdentityVerifyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/IdentityVerifyController.java
index 925ca8c..f99025c 100644
--- a/src/main/java/com/dreamchaser/depository_manage/controller/IdentityVerifyController.java
+++ b/src/main/java/com/dreamchaser/depository_manage/controller/IdentityVerifyController.java
@@ -7,19 +7,14 @@ import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.UserService;
import com.dreamchaser.depository_manage.utils.EncryptionAlgorithmUtil;
-import com.dreamchaser.depository_manage.utils.HttpUtils;
-import lombok.extern.java.Log;
-import lombok.extern.log4j.Log4j;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
import lombok.extern.slf4j.Slf4j;
-import org.apache.http.protocol.HTTP;
-import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@@ -34,25 +29,26 @@ import java.util.Map;
@Slf4j
@RestController
public class IdentityVerifyController {
-
-
+ private static GoApiClient goApiClient = new GoApiClient();
@Autowired
private RedisPool redisPool;
@Autowired
private UserService userService;
+
+
/**
* 用于验证用户身份
*/
@GetMapping("/identityVerify")
- public ModelAndView identityVerify(@RequestParam Map map, HttpServletRequest request, HttpServletResponse response){
+ public ModelAndView identityVerify(@RequestParam Map map, HttpServletRequest request, HttpServletResponse response) {
ModelAndView mv = new ModelAndView();
mv.addObject("userWxId", "");
mv.setViewName("pages/user/login");
- String url = PublicConfig.external_url_extranet+"/signcode/signcode";
+ String url = PublicConfig.external_url_extranet + "/signcode/signcode";
String userkey = map.get("userkey");
String usertoken = map.get("usertoken");
@@ -60,45 +56,45 @@ public class IdentityVerifyController {
EncryptionAlgorithmUtil encryptionAlgorithmUtil = new EncryptionAlgorithmUtil(code);
// 获取加密后的字符串
String algorithm = encryptionAlgorithmUtil.Algorithm();
- Map paramForPost = new HashMap<>();
- paramForPost.put("code",algorithm);
+ Map paramForPost = new HashMap<>();
+ paramForPost.put("code", algorithm);
String jsonString = JSONObject.toJSONString(paramForPost);
JSONObject paramObject = JSONObject.parseObject(jsonString);
try {
- String send = HttpUtils.send(url, paramObject, HTTP.UTF_8, userkey, usertoken);
+ // 使用 GoApiClient 发送不加密请求,但解密响应
+ String send = goApiClient.sendNoEncryptRequest(url, paramObject, userkey, usertoken);
JSONObject resultObj = JSONObject.parseObject(send);
int resultCode = resultObj.getInteger("code");
- if(resultCode == 0){
+ if (resultCode == 0) {
// 如果验证成功
String redisKey = PublicConfig.LoginRedisPrefix + userkey;
Object usernumber = redisPool.getRedisTemplateByDb(5).opsForHash().get(redisKey, "usernumber");
- if(usernumber != null){
+ if (usernumber != null) {
UserByPort userByNumber = userService.findUserByNumber(String.valueOf(usernumber));
// 设置放入时间
userByNumber.setInstant(Instant.now());
// 将登录用户存储到池中保存
- AuthenticationTokenPool.addUserToken(usertoken,userByNumber);
+ AuthenticationTokenPool.addUserToken(usertoken, userByNumber);
// 将key与token设置到session中
request.getSession().setAttribute("userKey", userkey);
request.getSession().setAttribute("userToken", usertoken);
request.getSession().setMaxInactiveInterval(3 * 60 * 60);
-
try {
response.sendRedirect("http://localhost:11111");
} catch (IOException e) {
e.printStackTrace();
}
- }else{
+ } else {
JSONObject captcha = PublicConfig.Captcha(request);
String picPath = (String) captcha.get("picPath");
String captchaid = (String) captcha.get("captchaid");
mv.addObject("picPath", picPath);
mv.addObject("captchaid", captchaid);
}
- }else{
+ } else {
// 如果验证失败
JSONObject captcha = PublicConfig.Captcha(request);
String picPath = (String) captcha.get("picPath");
@@ -112,4 +108,4 @@ public class IdentityVerifyController {
return mv;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
index b41744d..2e86d00 100644
--- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
+++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
@@ -12,6 +12,7 @@ import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.*;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -35,7 +36,7 @@ import java.util.*;
*/
@Controller
public class PageController {
-
+ private static GoApiClient goApiClient = new GoApiClient();
@Autowired
private MaterialTypeService materialTypeService;
@Autowired
@@ -3244,7 +3245,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, token);
+ post = goApiClient.callGoApi(url, paramObject, userKey, token);
} catch (IOException e) {
e.printStackTrace();
}
@@ -3315,7 +3316,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userKey, token);
+ post = goApiClient.callGoApi(url, paramObject, userKey, token);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java b/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
index 9535f78..c598d7e 100644
--- a/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
+++ b/src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
@@ -14,6 +14,7 @@ import com.dreamchaser.depository_manage.service.AccessAddressService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.*;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -35,7 +36,7 @@ import static com.dreamchaser.depository_manage.utils.CrudUtil.deleteHandle;
*/
@RestController
public class UserController {
-
+ private static GoApiClient goApiClient = new GoApiClient();
@Autowired
private RoleService roleService;
@@ -149,7 +150,8 @@ public class UserController {
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userkey, token);
+ // 使用 GoApiClient 发送加密请求
+ post = goApiClient.callGoApi(url, paramObject, userkey, token);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
index a53de8a..3807251 100644
--- a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
+++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
@@ -10,6 +10,7 @@ import com.dreamchaser.depository_manage.depository_mapper.CompanyMapper;
import com.dreamchaser.depository_manage.depository_mapper.ConstructionUnitMapper;
import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.utils.HttpUtils;
+import com.dreamchaser.depository_manage.utils.sm4.GoApiClient;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -20,7 +21,7 @@ import java.util.concurrent.*;
@Service
public class CompanyServiceImpl implements CompanyService {
-
+ private static GoApiClient goApiClient = new GoApiClient();
@Autowired
CompanyMapper companyMapper;
@@ -542,27 +543,32 @@ public class CompanyServiceImpl implements CompanyService {
/**
* 用于获取行政组织树(包括成员)
* @param id 查询id
- * @param
+ * @param userKey 用户key
+ * @param token 用户token
* @return
*/
- public List findAllUserByAdministration(String id,String userKey,String token){
- String url = PublicConfig.external_url +"/org/govthreeaboutman";
- Map map = new HashMap<>();
- map.put("id",id);
- map.put("level",0);
- map.put("all",1);
+ public List findAllUserByAdministration(String id, String userKey, String token) {
+ // 如果 GoApiClient 没有作为参数传入,需要注入
+ GoApiClient goApiClient = new GoApiClient();
+
+ String url = PublicConfig.external_url + "/org/govthreeaboutman";
+ Map map = new HashMap<>();
+ map.put("id", id);
+ map.put("level", 0);
+ map.put("all", 1);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
- post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userKey,token);
+ // 使用 GoApiClient 发送加密请求
+ post = goApiClient.callGoApi(url, paramObject, userKey, token);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("three");
- if(list == null){
+ if (list == null) {
list = new JSONArray();
}
List threeAboutManList = new ArrayList<>();
diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
index e7c165c..ea5df37 100644
--- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
+++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
@@ -5860,6 +5860,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
} else {
departmenthead = userService.findUserByIdForNoPack(departmentheadId);
Administration departmentByUser = administrativeService.getDepartmentByUser(departmenthead);
+ if(null == departmentByUser){
+ continue;
+ }
departmenthead.setMaindeparmentname(departmentByUser.getName());
userByPortMap.put(departmentheadId, departmenthead);
}
diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/sm4/ApiResponse.java b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/ApiResponse.java
new file mode 100644
index 0000000..1bad976
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/ApiResponse.java
@@ -0,0 +1,32 @@
+package com.dreamchaser.depository_manage.utils.sm4;
+
+
+import lombok.Data;
+
+@Data
+public class ApiResponse {
+ private int code;
+ private String msg;
+ private T data;
+
+ public ApiResponse() {}
+
+ public ApiResponse(int code, String msg, T data) {
+ this.code = code;
+ this.msg = msg;
+ this.data = data;
+ }
+
+ public static ApiResponse success(T data) {
+ if(null==data){
+ return new ApiResponse(0, "成功", (T) "成功,没有相关数据");
+ }else{
+ return new ApiResponse<>(0, "成功", data);
+ }
+
+ }
+
+ public static ApiResponse error(int code, String msg) {
+ return new ApiResponse<>(code, msg, null);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedArgumentResolver.java b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedArgumentResolver.java
new file mode 100644
index 0000000..8951fdd
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedArgumentResolver.java
@@ -0,0 +1,45 @@
+package com.dreamchaser.depository_manage.utils.sm4;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.MethodParameter;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.support.WebDataBinderFactory;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.method.support.ModelAndViewContainer;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@Component
+public class DecryptedArgumentResolver implements HandlerMethodArgumentResolver {
+
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ @Override
+ public boolean supportsParameter(MethodParameter parameter) {
+ return parameter.hasParameterAnnotation(DecryptedBody.class);
+ }
+
+ @Override
+ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
+ NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
+
+ HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
+ String decryptedBody = (String) request.getAttribute("decryptedBody");
+
+ if (decryptedBody != null) {
+ log.debug("准备解析解密后的数据: {}", decryptedBody);
+ return objectMapper.readValue(decryptedBody, parameter.getParameterType());
+ }
+
+ // 如果没有解密数据,尝试直接解析请求体(非加密模式)
+ try {
+ return objectMapper.readValue(request.getInputStream(), parameter.getParameterType());
+ } catch (Exception e) {
+ log.warn("无法解析请求体为 {},返回null", parameter.getParameterType().getSimpleName());
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedBody.java b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedBody.java
new file mode 100644
index 0000000..03b6843
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/DecryptedBody.java
@@ -0,0 +1,9 @@
+package com.dreamchaser.depository_manage.utils.sm4;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.PARAMETER)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DecryptedBody {
+}
\ No newline at end of file
diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedRequest.java b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedRequest.java
new file mode 100644
index 0000000..bc1d5ab
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedRequest.java
@@ -0,0 +1,20 @@
+package com.dreamchaser.depository_manage.utils.sm4;
+
+
+
+import lombok.Data;
+
+@Data
+public class EncryptedRequest {
+ /**
+ * 加密的数据字段
+ * 前端发送的是 "data" 字段,不是 "encryptedFile"
+ */
+ private String data;
+
+ public EncryptedRequest() {}
+
+ public EncryptedRequest(String data) {
+ this.data = data;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedResponseAdvice.java b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedResponseAdvice.java
new file mode 100644
index 0000000..70586f6
--- /dev/null
+++ b/src/main/java/com/dreamchaser/depository_manage/utils/sm4/EncryptedResponseAdvice.java
@@ -0,0 +1,113 @@
+package com.dreamchaser.depository_manage.utils.sm4;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+@Component
+@ControllerAdvice
+public class EncryptedResponseAdvice implements ResponseBodyAdvice