jtoms 4 vuotta sitten
vanhempi
commit
0b9c5a5906

+ 4 - 2
pom.xml

@@ -24,14 +24,16 @@
         <mysql-connector-java.version>8.0.27</mysql-connector-java.version>
         <mybatis-spring-boot-starter.version>2.2.0</mybatis-spring-boot-starter.version>
         <mybatis.version>3.5.7</mybatis.version>
-        <framework.version>1.0.16</framework.version>
-        <db-migration.version>1.0.0</db-migration.version>
 
         <slf4j.version>1.7.32</slf4j.version>
         <commons-lang3.version>3.12.0</commons-lang3.version>
         <lombok.version>1.18.22</lombok.version>
         <javax.servlet.version>4.0.1</javax.servlet.version>
         <okhttp.version>4.9.3</okhttp.version>
+
+
+        <framework.version>1.0.18</framework.version>
+        <db-migration.version>1.0.0</db-migration.version>
     </properties>
 
     <dependencies>

+ 3 - 1
src/main/java/com/zhiqiyun/open/core/models/app/AppKeyInfo.java

@@ -16,7 +16,9 @@ import java.util.List;
 public class AppKeyInfo {
     @TableId(type = IdType.INPUT)
     private Long id;
-    private String encryptKey;
+    private String name;
+    private String publicKey;
+    private String privateKey;
     private String remark;
     @TableField(typeHandler = JacksonTypeHandler.class)
     private List<String> permissions;

+ 9 - 7
src/main/java/com/zhiqiyun/open/mvc/manager/controller/AppKeyInfoController.java

@@ -4,19 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dliyun.oap.framework.security.algorithm.Rsa;
 import com.zhiqiyun.open.annotation.Permission;
 import com.zhiqiyun.open.core.enmus.YN;
 import com.zhiqiyun.open.core.models.app.ApiRequestLog;
 import com.zhiqiyun.open.core.models.app.AppKeyInfo;
 import com.zhiqiyun.open.core.service.ApiRequestLogService;
+import com.zhiqiyun.open.core.service.AppKeyInfoService;
+import com.zhiqiyun.open.core.service.SequenceService;
 import com.zhiqiyun.open.mvc.Result;
 import com.zhiqiyun.open.mvc.manager.params.QueryApiRequestLogParams;
 import com.zhiqiyun.open.mvc.manager.params.QueryAppKeyInfoParams;
 import com.zhiqiyun.open.mvc.manager.params.SaveAppKeyInfoParam;
-import com.zhiqiyun.open.core.service.AppKeyInfoService;
-import com.zhiqiyun.open.core.service.SequenceService;
 import com.zhiqiyun.open.utils.DateUtil;
-import com.zhiqiyun.open.utils.RandomUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.validation.Valid;
 import java.util.List;
 
 @RestController
@@ -95,15 +96,16 @@ public class AppKeyInfoController {
 
     @Permission(value = "app.key.add", tags = "新建AppKey")
     @PostMapping("/save")
-    public Result save(@RequestBody SaveAppKeyInfoParam param) {
+    public Result save(@Valid @RequestBody SaveAppKeyInfoParam param) throws Exception {
 
         AppKeyInfo appKeyInfo = new AppKeyInfo();
         BeanUtils.copyProperties(param, appKeyInfo);
 
         Long id = this.sequenceService.nextId();
-        String encryptKey = RandomUtil.get(64);
         appKeyInfo.setId(id);
-        appKeyInfo.setEncryptKey(encryptKey);
+        Rsa.RsaKeys rsaKeys = Rsa.genKeyPair();
+        appKeyInfo.setPublicKey(rsaKeys.getPublicKey());
+        appKeyInfo.setPrivateKey(rsaKeys.getPrivateKey());
         appKeyInfo.setCreatedTime(DateUtil.current());
         appKeyInfo.setIsEnable(YN.Y);
         this.appKeyInfoService.save(appKeyInfo);
@@ -113,7 +115,7 @@ public class AppKeyInfoController {
 
     @Permission(value = "app.key.add", tags = "更新AppKey")
     @PostMapping("/updateById")
-    public Result updateById(Long id, @RequestBody SaveAppKeyInfoParam param) {
+    public Result updateById(Long id, @Valid @RequestBody SaveAppKeyInfoParam param) {
         AppKeyInfo appKeyInfo = new AppKeyInfo();
         BeanUtils.copyProperties(param, appKeyInfo);
         appKeyInfo.setId(id);

+ 6 - 5
src/main/java/com/zhiqiyun/open/router/config/DesTransportSecurity.java

@@ -1,7 +1,8 @@
 package com.zhiqiyun.open.router.config;
 
+import com.dliyun.oap.framework.exception.TransportException;
 import com.dliyun.oap.framework.security.TransportSecurity;
-import com.dliyun.oap.framework.security.algorithm.DES;
+import com.dliyun.oap.framework.security.algorithm.Rsa;
 import com.zhiqiyun.open.core.models.app.AppKeyInfo;
 import com.zhiqiyun.open.core.service.AppKeyInfoService;
 import org.apache.commons.lang3.StringUtils;
@@ -13,19 +14,19 @@ public class DesTransportSecurity implements TransportSecurity {
     private AppKeyInfoService appKeyInfoService;
 
     @Override
-    public String responseEncrypt(String appKey, String s) {
+    public String responseEncrypt(String appKey, String s) throws TransportException {
         if (StringUtils.isNotBlank(appKey)) {
             AppKeyInfo appKeyInfo = this.appKeyInfoService.findByAppKey(appKey);
-            s = DES.encrypt(appKeyInfo.getEncryptKey(), s);
+            s = Rsa.encryptByPrivateKey(s, appKeyInfo.getPrivateKey());
         }
         return s;
     }
 
     @Override
-    public String requestDecrypt(String appKey, String s) {
+    public String requestDecrypt(String appKey, String s) throws TransportException {
         if (StringUtils.isNotBlank(appKey)) {
             AppKeyInfo appKeyInfo = this.appKeyInfoService.findByAppKey(appKey);
-            s = DES.decrypt(appKeyInfo.getEncryptKey(), s);
+            s = Rsa.decryptByPrivateKey(s, appKeyInfo.getPrivateKey());
         }
         return s;
     }

+ 3 - 1
src/main/resources/db/migration/V1.0.1__app_key.sql

@@ -11,7 +11,9 @@ DROP TABLE IF EXISTS `app_key_info`;
 CREATE TABLE `app_key_info`
 (
     `id`           VARCHAR(32)  NOT NULL,
-    `encrypt_key`  VARCHAR(64)  NOT NULL,
+    `name`  VARCHAR(50)  NOT NULL,
+    `private_key`  VARCHAR(1000)  NOT NULL,
+    `public_key`  VARCHAR(1000)  NOT NULL,
     `remark`       VARCHAR(100) NOT NULL DEFAULT '',
     `permissions`  TEXT         NULL     DEFAULT NULL,
     `is_enable`    INT(1)       NOT NULL,

+ 52 - 0
src/test/java/com/zhiqiyun/Test.java

@@ -0,0 +1,52 @@
+package com.zhiqiyun;
+
+import com.dliyun.oap.framework.security.algorithm.Rsa;
+
+public class Test {
+    public static void main(String[] args) throws Exception {
+        Rsa.RsaKeys rsaKeys = Rsa.genKeyPair();
+        String p1 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIy" +
+                "MjI3MTIiLCJ1c2VyX25hbWUiOiJhZG1pbiIsInJlYWxfbmFtZSI6ImFkbWluIiwiYXZhd" +
+                "GFyIjoiIiwiYXV0aG9yaXRpZXMiOlsiYWRtaW4iXSwiY2xpZW50X2lkIjoic2FiZXIiLCJyb2" +
+                "xlX25hbWUiOiJhZG1pbiIsImxpY2Vuc2UiOiJwb3dlcmVkIGJ5IGJsYWRleCIsInBvc3RfaWQi" +
+                "OiIxNDgxNTQ4Njc1NjA2MDQ0Njc0IiwidXNlcl9pZCI6IjE0ODE1NDg2NzkyNjQ3MjcwNDEiLCJyb2" +
+                "xlX2lkIjoiMTQ4MTU0ODY3Mzc4MTUyMjQzMyIsInNjb3BlIjpbImFsbCJdLCJuaWNrX25hbWUiOiJhZG" +
+                "1pbiIsIm9hdXRoX2lkIjoiIiwiZGV0YWlsIjp7InR5cGUiOiJ3ZWIifSwiZXhwIjoxNjQyNDEyMDYyLC" +
+                "JkZXB0X2lkIjoiMTQ4MTU0ODY3NTU5NzY1NjA2NiIsImp0aSI6ImFiMmExYmY3LTdjNDYtNGQ2MC1iMm" +
+                "MxLWY4MjMwOTgyMmU5YyIsImFjY291bnQiOiJhZG1pbiJ9.stMyV_h0Z1bljzS_Q_pkUvU91EX-KKybz" +
+                "cyWwgwa560eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIyMjI3MTIiLCJ1c" +
+                "2VyX25hbWUiOiJhZG1pbiIsInJlYWxfbmFtZSI6ImFkbWluIiwiYXZhdGFyIjoiIiwiYXV0aG9yaXRpZX" +
+                "MiOlsiYWRtaW4iXSwiY2xpZW50X2lkIjoic2FiZXIiLCJyb2xlX25hbWUiOiJhZG1pbiIsImxpY2Vuc2UiO" +
+                "iJwb3dlcmVkIGJ5IGJsYWRleCIsInBvc3RfaWQiOiIxNDgxNTQ4Njc1NjA2MDQ0Njc0IiwidXNlcl9pZCI" +
+                "6IjE0ODE1NDg2NzkyNjQ3MjcwNDEiLCJyb2xlX2lkIjoiMTQ4MTU0ODY3Mzc4MTUyMjQzMyIsInNjb3BlI" +
+                "jpbImFsbCJdLCJuaWNrX25hbWUiOiJhZG1pbiIsIm9hdXRoX2lkIjoiIiwiZGV0YWlsIjp7InR5cGUiOiJ" +
+                "3ZWIifSwiZXhwIjoxNjQyNDEyMDYyLCJkZXB0X2lkIjoiMTQ4MTU0ODY3NTU5NzY1NjA2NiIsImp0aSI6I" +
+                "mFiMmExYmY3LTdjNDYtNGQ2MC1iMmMxLWY4MjMwOTgyMmU5YyIsImFjY291bnQiOiJhZG1pbiJ9.st" +
+                "MyV_h0Z1bljzS_Q_pkUvU91EX-KKybzcyWwgwa560" +
+                "MjI3MTIiLCJ1c2VyX25hbWUiOiJhZG1pbiIsInJlYWxfbmFtZSI6ImFkbWluIiwiYXZhd" +
+                "GFyIjoiIiwiYXV0aG9yaXRpZXMiOlsiYWRtaW4iXSwiY2xpZW50X2lkIjoic2FiZXIiLCJyb2" +
+                "xlX25hbWUiOiJhZG1pbiIsImxpY2Vuc2UiOiJwb3dlcmVkIGJ5IGJsYWRleCIsInBvc3RfaWQi" +
+                "OiIxNDgxNTQ4Njc1NjA2MDQ0Njc0IiwidXNlcl9pZCI6IjE0ODE1NDg2NzkyNjQ3MjcwNDEiLCJyb2" +
+                "xlX2lkIjoiMTQ4MTU0ODY3Mzc4MTUyMjQzMyIsInNjb3BlIjpbImFsbCJdLCJuaWNrX25hbWUiOiJhZG" +
+                "1pbiIsIm9hdXRoX2lkIjoiIiwiZGV0YWlsIjp7InR5cGUiOiJ3ZWIifSwiZXhwIjoxNjQyNDEyMDYyLC" +
+                "JkZXB0X2lkIjoiMTQ4MTU0ODY3NTU5NzY1NjA2NiIsImp0aSI6ImFiMmExYmY3LTdjNDYtNGQ2MC1iMm" +
+                "MxLWY4MjMwOTgyMmU5YyIsImFjY291bnQiOiJhZG1pbiJ9.stMyV_h0Z1bljzS_Q_pkUvU91EX-KKybz" +
+                "cyWwgwa560eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIyMjI3MTIiLCJ1c" +
+                "2VyX25hbWUiOiJhZG1pbiIsInJlYWxfbmFtZSI6ImFkbWluIiwiYXZhdGFyIjoiIiwiYXV0aG9yaXRpZX" +
+                "MiOlsiYWRtaW4iXSwiY2xpZW50X2lkIjoic2FiZXIiLCJyb2xlX25hbWUiOiJhZG1pbiIsImxpY2Vuc2UiO" +
+                "iJwb3dlcmVkIGJ5IGJsYWRleCIsInBvc3RfaWQiOiIxNDgxNTQ4Njc1NjA2MDQ0Njc0IiwidXNlcl9pZCI" +
+                "6IjE0ODE1NDg2NzkyNjQ3MjcwNDEiLCJyb2xlX2lkIjoiMTQ4MTU0ODY3Mzc4MTUyMjQzMyIsInNjb3BlI" +
+                "jpbImFsbCJdLCJuaWNrX25hbWUiOiJhZG1pbiIsIm9hdXRoX2lkIjoiIiwiZGV0YWlsIjp7InR5cGUiOiJ" +
+                "3ZWIifSwiZXhwIjoxNjQyNDEyMDYyLCJkZXB0X2lkIjoiMTQ4MTU0ODY3NTU5NzY1NjA2NiIsImp0aSI6I" +
+                "mFiMmExYmY3LTdjNDYtNGQ2MC1iMmMxLWY4MjMwOTgyMmU5YyIsImFjY291bnQiOiJhZG1pbiJ9.st" +
+                "MyV_h0Z1bljzS_Q_pkUvU91EX-KKybzcyWwgwa560";
+
+
+        System.out.println(p1.length());
+        String p11 = Rsa.encryptByPrivateKey(p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1, rsaKeys.getPrivateKey());
+        System.out.println(p11);
+        String p2 = Rsa.decryptByPublicKey(p11, rsaKeys.getPublicKey());
+        System.out.println(p2.length());
+        System.out.println(p2.equals(p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1 + p1));
+    }
+}