From ced8c21e28a4457fc40d6e42bb751a31a8797c91 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 26 Mar 2021 18:44:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=85=AC=E5=85=B1=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/auth/config/RsaProperties.java | 7 + .../java/io/dataease/auth/util/JWTUtils.java | 18 ++ .../java/io/dataease/auth/util/RsaUtil.java | 37 +++- .../io/dataease/base/domain/PanelLink.java | 2 + .../base/domain/PanelLinkExample.java | 60 ++++++ .../dataease/base/mapper/PanelLinkMapper.xml | 27 ++- .../controller/panel/api/LinkApi.java | 31 ++- .../controller/panel/server/LinkServer.java | 56 +++++- .../request/panel/link/EnablePwdRequest.java | 11 ++ .../request/panel/link/LinkRequest.java | 6 +- .../request/panel/link/ValidateRequest.java | 15 ++ .../dataease/dto/panel/link/GenerateDto.java | 15 ++ .../dataease/dto/panel/link/ValidateDto.java | 13 ++ .../service/panel/PanelLinkService.java | 115 +++++++++-- .../src/main/resources/application.properties | 2 +- .../db/migration/V12__panel_table.sql | 1 + frontend/src/api/link/index.js | 41 +++- frontend/src/link/link.js | 7 + frontend/src/settings.js | 1 + frontend/src/store/getters.js | 3 +- frontend/src/store/index.js | 5 +- frontend/src/store/modules/link.js | 24 +++ frontend/src/styles/index.scss | 8 + frontend/src/utils/request.js | 9 + frontend/src/views/link/generate/index.vue | 66 ++++++- frontend/src/views/link/index.vue | 23 ++- frontend/src/views/link/pwd/index.vue | 185 +++++++++++++++++- 27 files changed, 724 insertions(+), 64 deletions(-) create mode 100644 backend/src/main/java/io/dataease/controller/request/panel/link/EnablePwdRequest.java create mode 100644 backend/src/main/java/io/dataease/controller/request/panel/link/ValidateRequest.java create mode 100644 backend/src/main/java/io/dataease/dto/panel/link/GenerateDto.java create mode 100644 backend/src/main/java/io/dataease/dto/panel/link/ValidateDto.java create mode 100644 frontend/src/store/modules/link.js diff --git a/backend/src/main/java/io/dataease/auth/config/RsaProperties.java b/backend/src/main/java/io/dataease/auth/config/RsaProperties.java index fc60282687..f44742d311 100644 --- a/backend/src/main/java/io/dataease/auth/config/RsaProperties.java +++ b/backend/src/main/java/io/dataease/auth/config/RsaProperties.java @@ -10,8 +10,15 @@ public class RsaProperties { public static String privateKey; + public static String publicKey; + @Value("${rsa.private_key}") public void setPrivateKey(String privateKey) { RsaProperties.privateKey = privateKey; } + + @Value("${rsa.public_key}") + public void setPublicKey(String publicKey) { + RsaProperties.publicKey = publicKey; + } } diff --git a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java index 7219376e10..1b4026dede 100644 --- a/backend/src/main/java/io/dataease/auth/util/JWTUtils.java +++ b/backend/src/main/java/io/dataease/auth/util/JWTUtils.java @@ -118,6 +118,24 @@ public class JWTUtils { } } + public static String signLink(String resourceId, String secret) { + Algorithm algorithm = Algorithm.HMAC256(secret); + return JWT.create().withClaim("resourceId", resourceId).sign(algorithm); + } + + public static boolean verifyLink(String token,String resourceId, String secret) { + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm) + .withClaim("resourceId", resourceId) + .build(); + try { + verifier.verify(token); + return true; + }catch (Exception e){ + return false; + } + } + /** * 获取当前token上次操作时间 * @param token diff --git a/backend/src/main/java/io/dataease/auth/util/RsaUtil.java b/backend/src/main/java/io/dataease/auth/util/RsaUtil.java index 577693cc48..46c5ed282a 100644 --- a/backend/src/main/java/io/dataease/auth/util/RsaUtil.java +++ b/backend/src/main/java/io/dataease/auth/util/RsaUtil.java @@ -1,11 +1,14 @@ package io.dataease.auth.util; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.ArrayUtils; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.PrivateKey; +import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; public class RsaUtil { @@ -23,7 +26,39 @@ public class RsaUtil { PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); - byte[] result = cipher.doFinal(Base64.decodeBase64(text)); +// byte[] result = cipher.doFinal(Base64.decodeBase64(text)); + // 下面该用分段加密 + byte[] result = null; + byte[] b = Base64.decodeBase64(text); + for (int i = 0; i < b.length; i += 64) { + byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(b, i,i + 64)); + result = ArrayUtils.addAll(result, doFinal); + } return new String(result); } + + /** + * 公钥加密 + * + * @param publicKeyText 公钥 + * @param text 待加密的文本 + * @return / + */ + public static String encryptByPublicKey(String publicKeyText, String text) throws Exception { + X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + /*byte[] result = cipher.doFinal(text.getBytes());*/ + // 下面该用分段加密 + byte[] result = null; + byte[] b = text.getBytes("utf-8"); + for (int i = 0; i < b.length; i += 50) { + byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(b, i,i + 50)); + result = ArrayUtils.addAll(result, doFinal); + } + return Base64.encodeBase64String(result); + } + } diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLink.java b/backend/src/main/java/io/dataease/base/domain/PanelLink.java index b64e46299f..efe0e389fb 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLink.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLink.java @@ -7,6 +7,8 @@ import lombok.Data; public class PanelLink implements Serializable { private String resourceId; + private Boolean valid; + private Boolean enablePwd; private String pwd; diff --git a/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java index f1303717f9..0dccb6d0b7 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelLinkExample.java @@ -174,6 +174,66 @@ public class PanelLinkExample { return (Criteria) this; } + public Criteria andValidIsNull() { + addCriterion("`valid` is null"); + return (Criteria) this; + } + + public Criteria andValidIsNotNull() { + addCriterion("`valid` is not null"); + return (Criteria) this; + } + + public Criteria andValidEqualTo(Boolean value) { + addCriterion("`valid` =", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidNotEqualTo(Boolean value) { + addCriterion("`valid` <>", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidGreaterThan(Boolean value) { + addCriterion("`valid` >", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidGreaterThanOrEqualTo(Boolean value) { + addCriterion("`valid` >=", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidLessThan(Boolean value) { + addCriterion("`valid` <", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidLessThanOrEqualTo(Boolean value) { + addCriterion("`valid` <=", value, "valid"); + return (Criteria) this; + } + + public Criteria andValidIn(List values) { + addCriterion("`valid` in", values, "valid"); + return (Criteria) this; + } + + public Criteria andValidNotIn(List values) { + addCriterion("`valid` not in", values, "valid"); + return (Criteria) this; + } + + public Criteria andValidBetween(Boolean value1, Boolean value2) { + addCriterion("`valid` between", value1, value2, "valid"); + return (Criteria) this; + } + + public Criteria andValidNotBetween(Boolean value1, Boolean value2) { + addCriterion("`valid` not between", value1, value2, "valid"); + return (Criteria) this; + } + public Criteria andEnablePwdIsNull() { addCriterion("enable_pwd is null"); return (Criteria) this; diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml index fb76f65c1d..130aeb61df 100644 --- a/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/PanelLinkMapper.xml @@ -3,6 +3,7 @@ + @@ -65,7 +66,7 @@ - resource_id, enable_pwd, pwd + resource_id, `valid`, enable_pwd, pwd