diff --git a/framework-core/pom.xml b/framework-core/pom.xml
index 1d10bf3..a601fb9 100644
--- a/framework-core/pom.xml
+++ b/framework-core/pom.xml
@@ -5,7 +5,7 @@
com.unionmed
unionmed-framework
- 0.0.13
+ 0.0.14
4.0.0
@@ -168,7 +168,6 @@
org.apache.commons
commons-lang3
- 3.12.0
diff --git a/framework-core/src/main/java/com/unionmed/framework/crypto/AES.java b/framework-core/src/main/java/com/unionmed/framework/crypto/AES.java
index 9101b03..a1155e1 100644
--- a/framework-core/src/main/java/com/unionmed/framework/crypto/AES.java
+++ b/framework-core/src/main/java/com/unionmed/framework/crypto/AES.java
@@ -15,36 +15,57 @@ import java.io.UnsupportedEncodingException;
@Slf4j
public class AES {
- private static final String ALGORITHM = "AES";
- private static final String PADDING = "AES/CBC/ISO10126Padding"; // AES/CBC/PKCS5PADDING
+ private final static String CHARSET = "UTF-8";
+ private final static String ALGORITHM = "AES";
+ private final static String PADDING = "AES/CBC/ISO10126Padding"; // AES/CBC/PKCS5PADDING
private static byte[] toUtf8Bytes(String s) throws UnsupportedEncodingException {
- return s.getBytes("UTF-8");
+ return s.getBytes(CHARSET);
}
- public static String encrypt(String sk, String iv, String value) {
+ public static byte[] encrypt(String sk, String iv, String val) {
try {
IvParameterSpec ivSpec = new IvParameterSpec(toUtf8Bytes(iv));
SecretKeySpec skSpec = new SecretKeySpec(toUtf8Bytes(sk), ALGORITHM);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(Cipher.ENCRYPT_MODE, skSpec, ivSpec);
- return Base64.encodeBase64String(cipher.doFinal(toUtf8Bytes(value)));
+ return cipher.doFinal(toUtf8Bytes(val));
} catch (Exception ex) {
log.error("AES加密失败", ex);
return null;
}
}
- public static String decrypt(String sk, String iv, String val) {
+ public static String encryptBase64String(String sk, String iv, String val) {
+ byte[] bytes = encrypt(sk, iv, val);
+ return bytes == null ? null : Base64.encodeBase64String(bytes);
+ }
+
+ public static byte[] decrypt(String sk, String iv, String val) {
try {
IvParameterSpec ivSpec = new IvParameterSpec(toUtf8Bytes(iv));
SecretKeySpec skSpec = new SecretKeySpec(toUtf8Bytes(sk), ALGORITHM);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(Cipher.DECRYPT_MODE, skSpec, ivSpec);
- return new String(cipher.doFinal(Base64.decodeBase64(val)));
+ return cipher.doFinal(Base64.decodeBase64(val));
} catch (Exception ex) {
log.error("AES解密失败", ex);
return null;
}
}
+
+ public static String decryptString(String sk, String iv, String val) {
+ byte[] bytes = decrypt(sk, iv, val);
+ return bytes == null ? null : new String(bytes);
+ }
+
+ public static String decryptString(String sk, String iv, String val, String charset) {
+ byte[] bytes = encrypt(sk, iv, val);
+ try {
+ return bytes == null ? null : new String(bytes, charset);
+ } catch (UnsupportedEncodingException e) {
+ log.error("字符集编码异常", e);
+ return null;
+ }
+ }
}
diff --git a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/ExceptionHandler.java b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/ExceptionHandler.java
index e0495cb..060b935 100644
--- a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/ExceptionHandler.java
+++ b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/ExceptionHandler.java
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
public class ExceptionHandler {
@org.springframework.web.bind.annotation.ExceptionHandler(UmedException.class)
- public BaseReturn umedException(UmedException e) {
+ public Object umedException(UmedException e) {
log.error(e.getMessage(), e);
return e.getRtn();
}
diff --git a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/BodyCryptUtils.java b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/BodyCryptUtils.java
new file mode 100644
index 0000000..0825edf
--- /dev/null
+++ b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/BodyCryptUtils.java
@@ -0,0 +1,43 @@
+package com.unionmed.framework.spring.mvc.response;
+
+import com.alibaba.fastjson.JSON;
+import com.unionmed.framework.crypto.AES;
+import com.unionmed.framework.util.Converter;
+
+import java.util.Date;
+
+/**
+ * @author ianChen
+ * @date 2023/6/27 14:33
+ */
+public final class BodyCryptUtils {
+
+ private static boolean isBasicType(Class clazz) {
+ return clazz == int.class
+ || clazz == Integer.class
+ || clazz == long.class
+ || clazz == Long.class
+ || clazz == short.class
+ || clazz == Short.class
+ || clazz == char.class
+ || clazz == Character.class
+ || clazz == byte.class
+ || clazz == Byte.class
+ || clazz == boolean.class
+ || clazz == Boolean.class
+ || clazz == float.class
+ || clazz == Float.class
+ || clazz == double.class
+ || clazz == Double.class
+ || CharSequence.class.isAssignableFrom(clazz)
+ || Date.class.isAssignableFrom(clazz);
+ }
+
+ public static String encrypt(String sk, String iv, Object body) {
+ return iv + AES.encryptBase64String(sk, iv, isBasicType(body.getClass()) ? Converter.toString(body) : JSON.toJSONString(body));
+ }
+
+ public static String decrypt(String sk, String body) {
+ return AES.decryptString(sk, body.substring(0, 16), body.substring(16));
+ }
+}
diff --git a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/DecryptRequestBodyAdvice.java b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/DecryptRequestBodyAdvice.java
index b6a6fd2..6379938 100644
--- a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/DecryptRequestBodyAdvice.java
+++ b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/DecryptRequestBodyAdvice.java
@@ -1,7 +1,6 @@
package com.unionmed.framework.spring.mvc.response;
import com.alibaba.fastjson.JSON;
-import com.unionmed.framework.crypto.AES;
import com.unionmed.framework.http.HttpHeaders;
import com.unionmed.framework.util.ObjectUtils;
import lombok.extern.slf4j.Slf4j;
@@ -39,7 +38,7 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
public HttpInputMessage beforeBodyRead(final HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class extends HttpMessageConverter>> converterType) throws IOException {
String body = IOUtils.toString(inputMessage.getBody(), HttpHeaders.CHARSET_UTF8);
if (ObjectUtils.notEmpty(body) && requestResponseBodyCryptProperties.isEnabled() && ObjectUtils.equalsIgnore(inputMessage.getHeaders().getFirst(HttpHeaders.X_DATA_CRYPT_E), HttpHeaders.X_DATA_CRYPT_E_VALUE_TRUE)) {
- body = AES.decrypt(requestResponseBodyCryptProperties.getSk(), body.substring(0, 16), body.substring(16));
+ body = BodyCryptUtils.decrypt(requestResponseBodyCryptProperties.getSk(), body);
}
if (log.isDebugEnabled()) {
diff --git a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/EncryptionResponseBodyInterceptor.java b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/EncryptionResponseBodyInterceptor.java
index 07c17a2..40877d4 100644
--- a/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/EncryptionResponseBodyInterceptor.java
+++ b/framework-core/src/main/java/com/unionmed/framework/spring/mvc/response/interceptor/EncryptionResponseBodyInterceptor.java
@@ -1,12 +1,11 @@
package com.unionmed.framework.spring.mvc.response.interceptor;
import cn.hutool.json.JSONUtil;
-import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
-import com.unionmed.framework.crypto.AES;
import com.unionmed.framework.http.HttpHeaders;
import com.unionmed.framework.spring.mvc.BaseReturn;
import com.unionmed.framework.spring.mvc.BaseReturnUtils;
+import com.unionmed.framework.spring.mvc.response.BodyCryptUtils;
import com.unionmed.framework.spring.mvc.response.RequestResponseBodyCryptProperties;
import com.unionmed.framework.util.Generators;
import com.unionmed.framework.util.ObjectUtils;
@@ -68,7 +67,7 @@ public class EncryptionResponseBodyInterceptor implements ResponseBodyIntercepto
return handleReturnValue(sk, iv, new JSONObject((Map) returnValue));
}
- return iv + AES.encrypt(sk, iv, JSON.toJSONString(returnValue));
+ return BodyCryptUtils.encrypt(sk, iv, returnValue);
}
@Override
diff --git a/framework-core/src/main/java/com/unionmed/framework/util/Generators.java b/framework-core/src/main/java/com/unionmed/framework/util/Generators.java
index c58b031..e688287 100644
--- a/framework-core/src/main/java/com/unionmed/framework/util/Generators.java
+++ b/framework-core/src/main/java/com/unionmed/framework/util/Generators.java
@@ -20,8 +20,9 @@ public final class Generators {
public static String random(int length) {
StringBuilder sb = new StringBuilder();
char a = 'a' - 10;
+ Random random = new Random();
while (sb.length() < length) {
- int n = Math.abs(new Random().nextInt()) % 36;
+ int n = Math.abs(random.nextInt()) % 36;
if (n < 10)
n += '0';
else
@@ -34,20 +35,14 @@ public final class Generators {
public static String randomMix(int length) {
StringBuilder sb = new StringBuilder();
- char a = 'a' - 10;
- Random mix = new Random();
+ char a = 'a' - 10, A = 'A' - 10;
+ Random random = new Random();
while (sb.length() < length) {
- int n = Math.abs(new Random().nextInt()) % 36;
+ int n = Math.abs(random.nextInt()) % 36;
if (n < 10)
n += '0';
else
- n += a;
-
- if (n >= 97 && n <= 122) {
- if (mix.nextInt(2) == 0) {
- n -= 32;
- }
- }
+ n += (n & 1) == 1 ? A : a;
sb.append((char) n);
}
@@ -63,9 +58,9 @@ public final class Generators {
*/
public static String number(int length) {
StringBuilder string = new StringBuilder();
+ Random random = new Random();
while (string.length() < length) {
- int n = Math.abs(new Random().nextInt()) % 10 + '0';
- string.append((char) n);
+ string.append((char) (Math.abs(random.nextInt()) % 10 + '0'));
}
return string.toString();
@@ -79,9 +74,9 @@ public final class Generators {
*/
public static String chars(int length) {
StringBuilder string = new StringBuilder();
+ Random random = new Random();
while (string.length() < length) {
- int n = Math.abs(new Random().nextInt()) % 26 + 'a';
- string.append((char) n);
+ string.append((char) (Math.abs(random.nextInt()) % 26 + 'a'));
}
return string.toString();
diff --git a/framework-orm/pom.xml b/framework-orm/pom.xml
index 8cce697..d56e485 100644
--- a/framework-orm/pom.xml
+++ b/framework-orm/pom.xml
@@ -5,7 +5,7 @@
unionmed-framework
com.unionmed
- 0.0.12
+ 0.0.14
4.0.0
diff --git a/framework-test/pom.xml b/framework-test/pom.xml
index 97c648c..073f469 100644
--- a/framework-test/pom.xml
+++ b/framework-test/pom.xml
@@ -5,7 +5,7 @@
com.unionmed
unionmed-framework
- 0.0.12
+ 0.0.14
4.0.0
diff --git a/pom.xml b/pom.xml
index d1b2b17..771ea65 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
4.0.0
com.unionmed
unionmed-framework
- 0.0.13
+ 0.0.14
pom
unionmed-framework
@@ -62,6 +62,7 @@
0.4.9
4.10.9049
1.73
+ 3.12.0
2.6
@@ -226,6 +227,11 @@
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
commons-io
commons-io
${commons-io.version}