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;
+ }
+}