From 92b5fe9365b40769d8e92c34acf6c5cc9e1f60c8 Mon Sep 17 00:00:00 2001 From: Qi <3194726156@qq.com> Date: Fri, 30 May 2025 15:57:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=A0=B9=E6=8D=AE=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E5=88=B0=E5=87=BA=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jeecg-boot-base-core/pom.xml | 5 + .../base/controller/JeecgController.java | 46 +++++++- .../system/base/service/SysRoleService.java | 8 ++ .../jeecg/common/system/util/JasyptUtil.java | 101 ++++++++++++++++++ .../service/impl/CoreSysRoleServiceImpl.java | 35 ++++++ 5 files changed, 192 insertions(+), 3 deletions(-) create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/service/SysRoleService.java create mode 100644 jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JasyptUtil.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/CoreSysRoleServiceImpl.java diff --git a/jeecg-boot-base-core/pom.xml b/jeecg-boot-base-core/pom.xml index 54498efd..8db62a0e 100644 --- a/jeecg-boot-base-core/pom.xml +++ b/jeecg-boot-base-core/pom.xml @@ -270,6 +270,11 @@ cn.hutool hutool-crypto + + com.github.ulisesbocchio + jasypt-spring-boot-starter + 3.0.3 + \ No newline at end of file diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index f3ff51ed..896da92d 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -8,7 +8,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.base.service.SysRoleService; import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.util.JasyptUtil; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; @@ -27,6 +29,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.lang.reflect.Field; import java.util.*; /** @@ -42,26 +45,63 @@ public class JeecgController> { protected S service; @Resource private JeecgBaseConfig jeecgBaseConfig; + @Autowired + private SysRoleService sysRoleService; /** * 导出excel * * @param request */ - protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title) { + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title){ // Step.1 组装查询条件 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - + String roleCode = sysRoleService.getRoleCodesByUserId(sysUser.getId()); // 过滤选中数据 String selections = request.getParameter("selections"); + if(roleCode.length() == 1) { + queryWrapper.eq("major_id", roleCode); + } if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); queryWrapper.in("id",selectionList); } // Step.2 获取导出数据 List exportList = service.list(queryWrapper); - + exportList.forEach(item -> { + try { + // 检查并解密银行卡字段 + Field pyCardField = null; + try { + pyCardField = item.getClass().getDeclaredField("pyCard"); + } catch (NoSuchFieldException e) { + // 字段不存在,跳过解密操作 + } + if (pyCardField != null) { + pyCardField.setAccessible(true); // 确保可以访问私有字段 + String encryptedValuePycard = (String) pyCardField.get(item); + String decryptedValuePycard = JasyptUtil.decrypt(encryptedValuePycard, "bigdata"); // 替换为你的密码 + pyCardField.set(item,decryptedValuePycard); // 将解密后的值存储到 decryptedField + } + // 检查并解密身份证字段 + Field identityIdField = null; + try { + identityIdField = item.getClass().getDeclaredField("identityId"); + } catch (NoSuchFieldException e) { + // 字段不存在,跳过解密操作 + } + if (identityIdField != null) { + //解密身份证 + identityIdField.setAccessible(true); // 确保可以访问私有字段 + String encryptedIdentityId = (String) identityIdField.get(item); + String decryptedIdentityId = JasyptUtil.decrypt(encryptedIdentityId, "bigdata"); // 替换为你的密码 + identityIdField.set(item,decryptedIdentityId); // 将解密后的值存储到 decryptedField + } + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }); // Step.3 AutoPoi 导出Excel ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); //此处设置的filename无效 ,前端会重更新设置一下 diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/service/SysRoleService.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/service/SysRoleService.java new file mode 100644 index 00000000..c0ee1b91 --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/service/SysRoleService.java @@ -0,0 +1,8 @@ +package org.jeecg.common.system.base.service; + +public interface SysRoleService { + /** + * 根据用户ID获取角色编码集合 + */ + String getRoleCodesByUserId(String userId); +} diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JasyptUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JasyptUtil.java new file mode 100644 index 00000000..b13ca0ae --- /dev/null +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/JasyptUtil.java @@ -0,0 +1,101 @@ +package org.jeecg.common.system.util; + + +import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig; + +public class JasyptUtil { + + /** + * PBE 算法 + */ + public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES"; + public static final String PBE_ALGORITHMS_MD5_TRIPLEDES = "PBEWITHMD5ANDTRIPLEDES"; + public static final String PBE_ALGORITHMS_SHA1_DESEDE = "PBEWITHSHA1ANDDESEDE"; + public static final String PBE_ALGORITHMS_SHA1_RC2_40 = "PBEWITHSHA1ANDRC2_40"; + + private JasyptUtil() { + } + + /** + * Jasypt 加密 + * + * @param encryptedStr 加密字符串 + * @param password 盐值 + * @return + */ + public static String encrypt(String encryptedStr, String password) { + return encrypt(encryptedStr, PBE_ALGORITHMS_MD5_DES, password); + } + + /** + * Jasypt 加密 + * + * @param encryptedStr 加密字符串 + * @param algorithm 加密算法 + * PBE ALGORITHMS: [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40] + * @param password 盐值 + * @return + */ + public static String encrypt(String encryptedStr, String algorithm, String password) { + // StandardPBEStringEncryptor、StandardPBEBigDecimalEncryptor、StandardPBEBigIntegerEncryptor、StandardPBEByteEncryptor + StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); + EnvironmentPBEConfig config = new EnvironmentPBEConfig(); + + // 指定加密算法 + config.setAlgorithm(algorithm); + // 加密盐值 + config.setPassword(password); + //config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator"); + encryptor.setConfig(config); + + // 加密 + return encryptor.encrypt(encryptedStr); + } + + /** + * Jasypt 解密 + * + * @param decryptStr 解密字符串 + * @param password 盐值 + * @return + */ + public static String decrypt(String decryptStr, String password) { + return decrypt(decryptStr, PBE_ALGORITHMS_MD5_DES, password); + } + + /** + * Jasypt 解密 + * + * @param decryptStr 解密字符串 + * @param algorithm 指定解密算法:解密算法要与加密算法一一对应 + * PBE ALGORITHMS: [PBEWITHMD5ANDDES, PBEWITHMD5ANDTRIPLEDES, PBEWITHSHA1ANDDESEDE, PBEWITHSHA1ANDRC2_40] + * @param password 盐值 + * @return + */ + public static String decrypt(String decryptStr, String algorithm, String password) { + // StandardPBEStringEncryptor、StandardPBEBigDecimalEncryptor、StandardPBEBigIntegerEncryptor、StandardPBEByteEncryptor + StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor(); + EnvironmentPBEConfig config = new EnvironmentPBEConfig(); + + // 指定解密算法:解密算法要与加密算法一一对应 + config.setAlgorithm(algorithm); + // 加密秘钥 + config.setPassword(password); + //config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator"); + encryptor.setConfig(config); + + // 解密 + return encryptor.decrypt(decryptStr); + } + + public static void main(String[] args) { + String encryptedStr = "I am the string to be encrypted"; + String algorithm = PBE_ALGORITHMS_SHA1_RC2_40; + String password = "salt"; + + String str = JasyptUtil.encrypt(encryptedStr, algorithm, password); + System.out.println("加密后的字符串:" + str); + System.out.println("解密后的字符串:" + JasyptUtil.decrypt(str, algorithm, password)); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/CoreSysRoleServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/CoreSysRoleServiceImpl.java new file mode 100644 index 00000000..8540ce67 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/CoreSysRoleServiceImpl.java @@ -0,0 +1,35 @@ +package org.jeecg.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.system.base.service.SysRoleService; +import org.jeecg.modules.system.entity.SysRole; +import org.jeecg.modules.system.entity.SysUserRole; +import org.jeecg.modules.system.mapper.SysRoleMapper; +import org.jeecg.modules.system.mapper.SysUserRoleMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class CoreSysRoleServiceImpl extends ServiceImpl implements SysRoleService { + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysRoleMapper sysRoleMapper; + @Override + public String getRoleCodesByUserId(String userId) { + + LambdaQueryWrapper queryUserRole = new LambdaQueryWrapper<>(); + queryUserRole.eq(SysUserRole::getUserId, userId); + SysUserRole sysUserRole = sysUserRoleMapper.selectOne(queryUserRole); + String roleId = sysUserRole.getRoleId(); + //获取对应角色数据 + LambdaQueryWrapper queryRole = new LambdaQueryWrapper<>(); + queryRole.eq(SysRole::getId, roleId); + SysRole sysRole = sysRoleMapper.selectOne(queryRole); + String roleCode = sysRole.getRoleCode(); + return roleCode; + } +}