diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java
index 9b4b1a44..8f255e8e 100644
--- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java
+++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysProfileController.java
@@ -83,6 +83,31 @@ public class SysProfileController extends BaseController {
}
int rows = DataPermissionHelper.ignore(() -> userService.updateUserProfile(user));
if (rows > 0) {
+ if (StringUtils.isNotEmpty(user.getPhonenumber())) {
+ try {
+ String bizId = String.valueOf(user.getUserId());
+ String phoneCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "phonenumber", user.getPhonenumber());
+ if (StringUtils.isNotBlank(phoneCipher)) {
+ SysUserBo phoneBo = new SysUserBo();
+ phoneBo.setUserId(user.getUserId());
+ phoneBo.setPhonenumber(phoneCipher);
+ DataPermissionHelper.ignore(() -> userService.updateUserProfile(phoneBo));
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密手机号失败, userId={}", user.getUserId(), e);
+ }
+ }
+ try {
+ String bizId = String.valueOf(user.getUserId());
+ SysUserVo updatedUser = userService.selectUserById(user.getUserId());
+ ICryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
+ "password,phonenumber,certificateNumber",
+ updatedUser.getPassword() != null ? updatedUser.getPassword() : "",
+ updatedUser.getPhonenumber() != null ? updatedUser.getPhonenumber() : "",
+ updatedUser.getCertificateNumber() != null ? updatedUser.getCertificateNumber() : "");
+ } catch (Exception e) {
+ log.warn("HSM完整性摘要更新失败, userId={}", user.getUserId(), e);
+ }
return R.ok();
}
return R.fail("修改个人信息异常,请联系管理员");
@@ -124,7 +149,10 @@ public class SysProfileController extends BaseController {
int rows = DataPermissionHelper.ignore(() -> userService.resetUserPwd(user.getUserId(), newEncrypted));
if (rows > 0) {
try {
- ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", newEncrypted);
+ String passwordCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", newEncrypted);
+ if (StringUtils.isNotBlank(passwordCipher)) {
+ DataPermissionHelper.ignore(() -> userService.resetUserPwd(user.getUserId(), passwordCipher));
+ }
} catch (Exception e) {
log.warn("HSM加密新密码失败, userId={}", user.getUserId(), e);
}
@@ -132,7 +160,7 @@ public class SysProfileController extends BaseController {
SysUserVo updatedUser = userService.selectUserById(user.getUserId());
ICryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
"password,phonenumber,certificateNumber",
- newEncrypted,
+ updatedUser.getPassword() != null ? updatedUser.getPassword() : "",
updatedUser.getPhonenumber() != null ? updatedUser.getPhonenumber() : "",
updatedUser.getCertificateNumber() != null ? updatedUser.getCertificateNumber() : "");
} catch (Exception e) {
diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
index 27cb8272..ac6c3698 100644
--- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
+++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
@@ -183,7 +183,52 @@ public class SysUserController extends BaseController {
user.randomSalt();
String loginAccount = StringUtils.isNotBlank(user.getLoginName()) ? user.getLoginName() : user.getUserName();
user.setPassword(DigestUtil.md5Hex(loginAccount + user.getPassword() + user.getSalt()));
- return toAjax(userService.insertUser(user));
+ int rows = userService.insertUser(user);
+ if (rows > 0) {
+ String bizId = String.valueOf(user.getUserId());
+ try {
+ String passwordCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", user.getPassword());
+ if (StringUtils.isNotBlank(passwordCipher)) {
+ userService.resetUserPwd(user.getUserId(), passwordCipher);
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密密码失败, userId={}", user.getUserId(), e);
+ }
+ if (StringUtils.isNotEmpty(user.getPhonenumber())) {
+ try {
+ String phoneCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "phonenumber", user.getPhonenumber());
+ if (StringUtils.isNotBlank(phoneCipher)) {
+ userService.updateUserProfile(new SysUserBo() {{ setUserId(user.getUserId()); setPhonenumber(phoneCipher); }});
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密手机号失败, userId={}", user.getUserId(), e);
+ }
+ }
+ if (StringUtils.isNotEmpty(user.getCertificateNumber())) {
+ try {
+ String certCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "certificateNumber", user.getCertificateNumber());
+ if (StringUtils.isNotBlank(certCipher)) {
+ org.dromara.system.domain.bo.SysUserBo certBo = new org.dromara.system.domain.bo.SysUserBo();
+ certBo.setUserId(user.getUserId());
+ certBo.setCertificateNumber(certCipher);
+ userService.updateUserById(certBo);
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密证件号失败, userId={}", user.getUserId(), e);
+ }
+ }
+ try {
+ SysUserVo updatedUser = userService.selectUserById(user.getUserId());
+ ICryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
+ "password,phonenumber,certificateNumber",
+ updatedUser.getPassword() != null ? updatedUser.getPassword() : "",
+ updatedUser.getPhonenumber() != null ? updatedUser.getPhonenumber() : "",
+ updatedUser.getCertificateNumber() != null ? updatedUser.getCertificateNumber() : "");
+ } catch (Exception e) {
+ log.warn("HSM完整性摘要更新失败, userId={}", user.getUserId(), e);
+ }
+ }
+ return toAjax(rows);
}
/**
@@ -204,7 +249,47 @@ public class SysUserController extends BaseController {
} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
- return toAjax(userService.updateUser(user));
+ int rows = userService.updateUser(user);
+ if (rows > 0) {
+ String bizId = String.valueOf(user.getUserId());
+ if (StringUtils.isNotBlank(user.getPhonenumber())) {
+ try {
+ String phoneCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "phonenumber", user.getPhonenumber());
+ if (StringUtils.isNotBlank(phoneCipher)) {
+ SysUserBo phoneBo = new SysUserBo();
+ phoneBo.setUserId(user.getUserId());
+ phoneBo.setPhonenumber(phoneCipher);
+ userService.updateUserProfile(phoneBo);
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密手机号失败, userId={}", user.getUserId(), e);
+ }
+ }
+ if (StringUtils.isNotBlank(user.getCertificateNumber())) {
+ try {
+ String certCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "certificateNumber", user.getCertificateNumber());
+ if (StringUtils.isNotBlank(certCipher)) {
+ SysUserBo certBo = new SysUserBo();
+ certBo.setUserId(user.getUserId());
+ certBo.setCertificateNumber(certCipher);
+ userService.updateUserById(certBo);
+ }
+ } catch (Exception e) {
+ log.warn("HSM加密证件号失败, userId={}", user.getUserId(), e);
+ }
+ }
+ try {
+ SysUserVo updatedUser = userService.selectUserById(user.getUserId());
+ ICryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
+ "password,phonenumber,certificateNumber",
+ updatedUser.getPassword() != null ? updatedUser.getPassword() : "",
+ updatedUser.getPhonenumber() != null ? updatedUser.getPhonenumber() : "",
+ updatedUser.getCertificateNumber() != null ? updatedUser.getCertificateNumber() : "");
+ } catch (Exception e) {
+ log.warn("HSM完整性摘要更新失败, userId={}", user.getUserId(), e);
+ }
+ }
+ return toAjax(rows);
}
/**
@@ -254,7 +339,10 @@ public class SysUserController extends BaseController {
if (rows > 0) {
try {
String bizId = String.valueOf(user.getUserId());
- ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", md5Password);
+ String passwordCipher = ICryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", md5Password);
+ if (StringUtils.isNotBlank(passwordCipher)) {
+ userService.resetUserPwd(user.getUserId(), passwordCipher);
+ }
} catch (Exception e) {
log.warn("HSM加密重置密码失败, userId={}", user.getUserId(), e);
}
@@ -263,7 +351,7 @@ public class SysUserController extends BaseController {
SysUserVo updatedUser = userService.selectUserById(user.getUserId());
ICryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
"password,phonenumber,certificateNumber",
- md5Password,
+ updatedUser.getPassword() != null ? updatedUser.getPassword() : "",
updatedUser.getPhonenumber() != null ? updatedUser.getPhonenumber() : "",
updatedUser.getCertificateNumber() != null ? updatedUser.getCertificateNumber() : "");
} catch (Exception e) {
diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java
index 19f5fabc..d7c1083f 100644
--- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java
+++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/listener/SysUserImportListener.java
@@ -20,6 +20,7 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserImportVo;
import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.service.ICryptoSensitiveHsmService;
import org.dromara.system.service.ISysConfigService;
import org.dromara.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
@@ -59,7 +60,7 @@ public class SysUserImportListener extends AnalysisEventListener").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else if (isUpdateSupport) {
@@ -79,6 +101,41 @@ public class SysUserImportListener extends AnalysisEventListener").append(successNum).append("、账号 ").append(user.getUserName()).append(" 更新成功");
} else {
diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
index d37da72b..84a19d25 100644
--- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
+++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
@@ -29,6 +29,7 @@ import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.mapper.*;
+import org.dromara.system.service.ICryptoSensitiveHsmService;
import org.dromara.system.service.ISysTenantService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@@ -37,6 +38,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.*;
+import static software.amazon.awssdk.http.nio.netty.internal.ProxyTunnelInitHandler.log;
+
/**
* 租户Service业务层处理
*
@@ -165,6 +168,22 @@ public class SysTenantServiceImpl implements ISysTenantService {
sd.setDeptId(deptId);
deptMapper.updateById(sd);
+ try {
+ String bizId = String.valueOf(user.getUserId());
+ String passwordCipher = SpringUtils.getBean(ICryptoSensitiveHsmService.class)
+ .encryptAndSave("sys_user", bizId, "password", user.getPassword());
+ if (StringUtils.isNotBlank(passwordCipher)) {
+ userMapper.update(null, new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper()
+ .eq(SysUser::getUserId, user.getUserId())
+ .set(SysUser::getPassword, passwordCipher));
+ }
+ SpringUtils.getBean(ICryptoSensitiveHsmService.class)
+ .saveIntegrityHash("sys_user", bizId, "password,phonenumber,certificateNumber",
+ passwordCipher != null ? passwordCipher : user.getPassword(), "", "");
+ } catch (Exception e) {
+
+ }
+
// 用户和角色关联表
SysUserRole userRole = new SysUserRole();
userRole.setUserId(user.getUserId());
diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/service/SysRegisterService.java b/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/service/SysRegisterService.java
index 5a3351d0..f70b0147 100644
--- a/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/service/SysRegisterService.java
+++ b/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/service/SysRegisterService.java
@@ -3,6 +3,7 @@ package org.dromara.web.service;
import cn.hutool.crypto.digest.BCrypt;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.RegisterBody;
@@ -21,6 +22,7 @@ import org.dromara.common.web.config.properties.CaptchaProperties;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.ICryptoSensitiveHsmService;
import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Service;
@@ -29,6 +31,7 @@ import org.springframework.stereotype.Service;
*
* @author Lion Li
*/
+@Slf4j
@RequiredArgsConstructor
@Service
public class SysRegisterService {
@@ -36,6 +39,7 @@ public class SysRegisterService {
private final ISysUserService userService;
private final SysUserMapper userMapper;
private final CaptchaProperties captchaProperties;
+ private final ICryptoSensitiveHsmService cryptoSensitiveHsmService;
/**
* 注册
@@ -69,6 +73,19 @@ public class SysRegisterService {
if (!regFlag) {
throw new UserException("user.register.error");
}
+ try {
+ String bizId = String.valueOf(sysUser.getUserId());
+ String passwordCipher = cryptoSensitiveHsmService.encryptAndSave("sys_user", bizId, "password", sysUser.getPassword());
+ if (StringUtils.isNotBlank(passwordCipher)) {
+ userService.resetUserPwd(sysUser.getUserId(), passwordCipher);
+ }
+ cryptoSensitiveHsmService.saveIntegrityHash("sys_user", bizId,
+ "password,phonenumber,certificateNumber",
+ passwordCipher != null ? passwordCipher : (sysUser.getPassword() != null ? sysUser.getPassword() : ""),
+ "", "");
+ } catch (Exception e) {
+ log.error("HSM加密用户密码失败, userId={}", sysUser.getUserId(), e);
+ }
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
}