xiongzhu 4 lat temu
rodzic
commit
f858000143

+ 3 - 1
src/main/java/cn/licoy/encryptbody/advice/DecryptRequestBodyAdvice.java

@@ -16,6 +16,7 @@ import cn.licoy.encryptbody.util.CheckUtils;
 import cn.licoy.encryptbody.util.DESEncryptUtil;
 import cn.licoy.encryptbody.util.DESEncryptUtil;
 import cn.licoy.encryptbody.util.StringUtils;
 import cn.licoy.encryptbody.util.StringUtils;
 import jodd.util.ReflectUtil;
 import jodd.util.ReflectUtil;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -88,6 +89,7 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
         return body;
         return body;
     }
     }
 
 
+    @SneakyThrows
     @Override
     @Override
     @Nonnull
     @Nonnull
     public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, @Nonnull MethodParameter parameter,
     public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, @Nonnull MethodParameter parameter,
@@ -206,7 +208,7 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
      * @param infoBean         加密信息
      * @param infoBean         加密信息
      * @return 解密结果
      * @return 解密结果
      */
      */
-    private String switchDecrypt(String formatStringBody, DecryptAnnotationInfoBean infoBean) {
+    private String switchDecrypt(String formatStringBody, DecryptAnnotationInfoBean infoBean) throws Exception {
         DecryptBodyMethod method = infoBean.getDecryptBodyMethod();
         DecryptBodyMethod method = infoBean.getDecryptBodyMethod();
         if (method == null) throw new DecryptMethodNotFoundException();
         if (method == null) throw new DecryptMethodNotFoundException();
         String key = infoBean.getKey();
         String key = infoBean.getKey();

+ 3 - 1
src/main/java/cn/licoy/encryptbody/advice/EncryptResponseBodyAdvice.java

@@ -11,6 +11,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import cn.licoy.encryptbody.config.EncryptBodyConfig;
 import cn.licoy.encryptbody.config.EncryptBodyConfig;
 import jodd.util.ReflectUtil;
 import jodd.util.ReflectUtil;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.MethodParameter;
 import org.springframework.core.MethodParameter;
@@ -87,6 +88,7 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice {
                 returnType.getMethod().isAnnotationPresent(SHAEncryptBody.class);
                 returnType.getMethod().isAnnotationPresent(SHAEncryptBody.class);
     }
     }
 
 
+    @SneakyThrows
     @Override
     @Override
     public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
     public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                                   Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
                                   Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
@@ -203,7 +205,7 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice {
      * @param infoBean         加密信息
      * @param infoBean         加密信息
      * @return 加密结果
      * @return 加密结果
      */
      */
-    private String switchEncrypt(String formatStringBody, EncryptAnnotationInfoBean infoBean) {
+    private String switchEncrypt(String formatStringBody, EncryptAnnotationInfoBean infoBean) throws Exception {
         EncryptBodyMethod method = infoBean.getEncryptBodyMethod();
         EncryptBodyMethod method = infoBean.getEncryptBodyMethod();
         if (method == null) {
         if (method == null) {
             throw new EncryptMethodNotFoundException();
             throw new EncryptMethodNotFoundException();

+ 28 - 28
src/main/java/cn/licoy/encryptbody/util/AESEncryptUtil.java

@@ -1,13 +1,15 @@
 package cn.licoy.encryptbody.util;
 package cn.licoy.encryptbody.util;
 
 
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
+import javax.crypto.*;
 import javax.crypto.spec.SecretKeySpec;
 import javax.crypto.spec.SecretKeySpec;
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 import java.security.SecureRandom;
 
 
 /**
 /**
  * <p>AES加密处理工具类</p>
  * <p>AES加密处理工具类</p>
+ *
  * @author licoy.cn
  * @author licoy.cn
  * @version 2018/9/5
  * @version 2018/9/5
  */
  */
@@ -15,50 +17,48 @@ public class AESEncryptUtil {
 
 
     /**
     /**
      * AES加密
      * AES加密
+     *
      * @param content  字符串内容
      * @param content  字符串内容
      * @param password 密钥
      * @param password 密钥
      */
      */
-    public static String encrypt(String content, String password){
-        return aes(content,password,Cipher.ENCRYPT_MODE);
+    public static String encrypt(String content, String password) throws Exception {
+        return aes(content, password, Cipher.ENCRYPT_MODE);
     }
     }
 
 
 
 
     /**
     /**
      * AES解密
      * AES解密
+     *
      * @param content  字符串内容
      * @param content  字符串内容
      * @param password 密钥
      * @param password 密钥
      */
      */
-    public static String decrypt(String content, String password){
-        return aes(content,password,Cipher.DECRYPT_MODE);
+    public static String decrypt(String content, String password) throws Exception {
+        return aes(content, password, Cipher.DECRYPT_MODE);
     }
     }
 
 
     /**
     /**
      * AES加密/解密 公共方法
      * AES加密/解密 公共方法
+     *
      * @param content  字符串
      * @param content  字符串
      * @param password 密钥
      * @param password 密钥
      * @param type     加密:{@link Cipher#ENCRYPT_MODE},解密:{@link Cipher#DECRYPT_MODE}
      * @param type     加密:{@link Cipher#ENCRYPT_MODE},解密:{@link Cipher#DECRYPT_MODE}
      */
      */
-    private static String aes(String content, String password, int type) {
-        try {
-            KeyGenerator generator = KeyGenerator.getInstance("AES");
-            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
-            random.setSeed(password.getBytes());
-            generator.init(128, random);
-            SecretKey secretKey = generator.generateKey();
-            byte[] enCodeFormat = secretKey.getEncoded();
-            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
-            Cipher cipher = Cipher.getInstance("AES");
-            cipher.init(type, key);
-            if (type == Cipher.ENCRYPT_MODE) {
-                byte[] byteContent = content.getBytes("utf-8");
-                return Hex2Util.parseByte2HexStr(cipher.doFinal(byteContent));
-            } else {
-                byte[] byteContent = Hex2Util.parseHexStr2Byte(content);
-                return new String(cipher.doFinal(byteContent));
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
+    private static String aes(String content, String password, int type) throws Exception {
+        KeyGenerator generator = KeyGenerator.getInstance("AES");
+        SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
+        random.setSeed(password.getBytes());
+        generator.init(128, random);
+        SecretKey secretKey = generator.generateKey();
+        byte[] enCodeFormat = secretKey.getEncoded();
+        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
+        Cipher cipher = Cipher.getInstance("AES");
+        cipher.init(type, key);
+        if (type == Cipher.ENCRYPT_MODE) {
+            byte[] byteContent = content.getBytes("utf-8");
+            return Hex2Util.parseByte2HexStr(cipher.doFinal(byteContent));
+        } else {
+            byte[] byteContent = Hex2Util.parseHexStr2Byte(content);
+            return new String(cipher.doFinal(byteContent));
         }
         }
-        return null;
     }
     }
 }
 }

+ 43 - 0
src/main/java/com/izouma/jmrh/converter/EncryptConverter.java

@@ -0,0 +1,43 @@
+package com.izouma.jmrh.converter;
+
+import cn.licoy.encryptbody.config.EncryptBodyConfig;
+import cn.licoy.encryptbody.util.AESEncryptUtil;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+
+@Converter
+@Slf4j
+public class EncryptConverter implements AttributeConverter<String, String> {
+
+    @Value("${encrypt.body.aes-key}")
+    private String key;
+
+    @Override
+    public String convertToDatabaseColumn(String s) {
+        if (StringUtils.isNotBlank(s)) {
+            try {
+                return AESEncryptUtil.encrypt(s, key);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return s;
+    }
+
+    @Override
+    public String convertToEntityAttribute(String s) {
+        if (StringUtils.isNotBlank(s)) {
+            try {
+                return AESEncryptUtil.decrypt(s, key);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return s;
+    }
+}

+ 5 - 0
src/main/java/com/izouma/jmrh/domain/User.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.izouma.jmrh.annotations.Searchable;
 import com.izouma.jmrh.annotations.Searchable;
 import com.izouma.jmrh.config.Constants;
 import com.izouma.jmrh.config.Constants;
+import com.izouma.jmrh.converter.EncryptConverter;
 import com.izouma.jmrh.security.Authority;
 import com.izouma.jmrh.security.Authority;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -69,6 +70,7 @@ public class User extends BaseEntity implements Serializable {
     private String country;
     private String country;
 
 
     @Searchable
     @Searchable
+    @Convert(converter = EncryptConverter.class)
     private String phone;
     private String phone;
 
 
     @Column(unique = true)
     @Column(unique = true)
@@ -79,10 +81,13 @@ public class User extends BaseEntity implements Serializable {
     private OrgInfo orgInfo;
     private OrgInfo orgInfo;
 
 
     /*实名认证信息*/
     /*实名认证信息*/
+    @Convert(converter = EncryptConverter.class)
     private String contactName;
     private String contactName;
 
 
+    @Convert(converter = EncryptConverter.class)
     private String contactPhone;
     private String contactPhone;
 
 
+    @Convert(converter = EncryptConverter.class)
     private String idNo;
     private String idNo;
 
 
     private String occupation;
     private String occupation;

+ 1 - 1
src/main/java/com/izouma/jmrh/SndExcelDTO.java → src/main/java/com/izouma/jmrh/dto/SndExcelDTO.java

@@ -1,4 +1,4 @@
-package com.izouma.jmrh;
+package com.izouma.jmrh.dto;
 
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.jmrh.annotations.Searchable;
 import com.izouma.jmrh.annotations.Searchable;

+ 1 - 3
src/main/java/com/izouma/jmrh/web/ResourceSupplyAndDemandController.java

@@ -1,8 +1,6 @@
 package com.izouma.jmrh.web;
 package com.izouma.jmrh.web;
 
 
-import cn.licoy.encryptbody.annotation.encrypt.EncryptBody;
-import cn.licoy.encryptbody.enums.EncryptBodyMethod;
-import com.izouma.jmrh.SndExcelDTO;
+import com.izouma.jmrh.dto.SndExcelDTO;
 import com.izouma.jmrh.annotations.OperLog;
 import com.izouma.jmrh.annotations.OperLog;
 import com.izouma.jmrh.domain.BaseEntity;
 import com.izouma.jmrh.domain.BaseEntity;
 import com.izouma.jmrh.domain.ResourceSupplyAndDemand;
 import com.izouma.jmrh.domain.ResourceSupplyAndDemand;

+ 2 - 1
src/main/java/com/izouma/jmrh/web/UserController.java

@@ -145,7 +145,8 @@ public class UserController extends BaseController {
     @PreAuthorize("hasRole('ADMIN')")
     @PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     @GetMapping("/all")
     public Page<User> all(PageQuery pageQuery) {
     public Page<User> all(PageQuery pageQuery) {
-        return userRepo.findAll(toSpecification(pageQuery, User.class), toPageRequest(pageQuery));
+        Page<User> all = userRepo.findAll(toSpecification(pageQuery, User.class), toPageRequest(pageQuery));
+        return all;
     }
     }
 
 
     @PreAuthorize("hasRole('ADMIN')")
     @PreAuthorize("hasRole('ADMIN')")