diff --git a/bonus-modules/bonus-material/src/main/java/com/bonus/material/interceptor/DataEnDecryptInterceptor.java b/bonus-modules/bonus-material/src/main/java/com/bonus/material/interceptor/DataEnDecryptInterceptor.java index 1c9c1303..fc9541f9 100644 --- a/bonus-modules/bonus-material/src/main/java/com/bonus/material/interceptor/DataEnDecryptInterceptor.java +++ b/bonus-modules/bonus-material/src/main/java/com/bonus/material/interceptor/DataEnDecryptInterceptor.java @@ -24,13 +24,14 @@ import java.util.Properties; * @author weiweiwang */ @Intercepts({ - @Signature(type = ParameterHandler.class, method = "setParameters", args = {PreparedStatement.class}), - @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}) +// @Signature(type = ParameterHandler.class, method = "setParameters", args = {PreparedStatement.class}), +// @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}) }) public class DataEnDecryptInterceptor implements Interceptor { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); final static String USER_MAPPER_ID = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"; final static String DEPT_MAPPER_ID = "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNxxxNNN"; + @Override public Object intercept(Invocation invocation) throws Throwable { try { @@ -68,7 +69,7 @@ public class DataEnDecryptInterceptor implements Interceptor { return invocation.proceed(); } catch (Exception e){ - logger.error("mybatis对敏感数据加解密拦截器异常报错,{}",e.getMessage ()); + logger.error("mybatis对敏感数据加解密拦截器异常报错", e); return invocation.proceed(); } } @@ -83,28 +84,42 @@ public class DataEnDecryptInterceptor implements Interceptor { } private void encryptUserObject(Object parameterObject){ + if (parameterObject == null) { + logger.warn("encryptUserObject: parameterObject is null"); + return; + } if (parameterObject instanceof BmProject) { BmProject pro = (BmProject) parameterObject; // 加密敏感字段 - - if (pro.getTelphone() != null) { - pro.setTelphone(Sm4Utils.encrypt(pro.getTelphone())); - } + encryptField(pro, "telphone"); } } private void encryptDeptObject(Object parameterObject) { + if (parameterObject == null) { + logger.warn("encryptDeptObject: parameterObject is null"); + return; + } if (parameterObject instanceof SysDept) { SysDept dept = (SysDept) parameterObject; // 加密敏感字段 - if (dept.getEmail() != null) { - dept.setEmail(Sm4Utils.encrypt(dept.getEmail())); - } - if (dept.getPhone() != null) { - dept.setPhone(Sm4Utils.encrypt(dept.getPhone())); - } + encryptField(dept, "email"); + encryptField(dept, "phone"); } + } + private void encryptField(Object obj, String fieldName) { + try { + Field field = obj.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + Object value = field.get(obj); + if (value != null && value instanceof String) { + String encryptedValue = Sm4Utils.encrypt((String) value); + field.set(obj, encryptedValue); + } + } catch (Exception e) { + logger.error("Failed to encrypt field {} in {}", fieldName, obj.getClass().getName(), e); + } } private void decryUserObject(Object result){ @@ -119,14 +134,17 @@ public class DataEnDecryptInterceptor implements Interceptor { } else if (result instanceof BmProject) { decryptUser ((BmProject) result); } - } catch (Exception ingore) { + } catch (Exception e) { + logger.error("Error decrypting user object", e); } } - private void decryptUser(BmProject pro) { - if (pro.getTelphone() != null) { - pro.setTelphone(Sm4Utils.decrypt(pro.getTelphone())); + private void decryptUser(BmProject pro) { + if (pro == null) { + logger.warn("decryptUser: pro is null"); + return; } + decryptField(pro, "telphone"); } private void decryDeptObject(Object result){ @@ -141,16 +159,31 @@ public class DataEnDecryptInterceptor implements Interceptor { } else if (result instanceof SysDept) { decryptDept ((SysDept) result); } - } catch (Exception ingore) { + } catch (Exception e) { + logger.error("Error decrypting dept object", e); } } private void decryptDept(SysDept dept) { - if (dept.getEmail() != null) { - dept.setEmail(Sm4Utils.decrypt(dept.getEmail())); + if (dept == null) { + logger.warn("decryptDept: dept is null"); + return; } - if (dept.getPhone() != null) { - dept.setPhone(Sm4Utils.decrypt(dept.getPhone())); + decryptField(dept, "email"); + decryptField(dept, "phone"); + } + + private void decryptField(Object obj, String fieldName) { + try { + Field field = obj.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + Object value = field.get(obj); + if (value != null && value instanceof String) { + String decryptedValue = Sm4Utils.decrypt((String) value); + field.set(obj, decryptedValue); + } + } catch (Exception e) { + logger.error("Failed to decrypt field {} in {}", fieldName, obj.getClass().getName(), e); } }