v3.25.0【优化】密码加密随机盐;【优化】java依赖版本;【优化】后端依赖库;【优化】单号生成器;【优化】防重复提交;【优化】sa-base.yaml健康检查邮箱;【新增】前端夜间模式;【优化】标签页issue;【优化】字典int回显bug

This commit is contained in:
zhuoda
2025-08-05 20:10:13 +08:00
parent 97df843072
commit 075e7ad134
147 changed files with 2412 additions and 1772 deletions

View File

@@ -68,6 +68,7 @@ public class AdminInterceptor implements HandlerInterceptor {
NoNeedLogin noNeedLogin = ((HandlerMethod) handler).getMethodAnnotation(NoNeedLogin.class);
if (noNeedLogin != null) {
checkActiveTimeout(requestEmployee);
SmartRequestUtil.setRequestUser(requestEmployee);
return true;
}

View File

@@ -36,7 +36,7 @@ public class DepartmentEntity {
/**
* 负责人员工 id
*/
@TableField(updateStrategy = FieldStrategy.IGNORED)
@TableField(updateStrategy = FieldStrategy.NEVER)
private Long managerId;
/**

View File

@@ -23,6 +23,12 @@ public class EmployeeEntity {
@TableId(type = IdType.AUTO)
private Long employeeId;
/**
* 唯一id
*/
private String employeeUid;
/**
* 登录账号
*/

View File

@@ -138,16 +138,20 @@ public class EmployeeService {
}
EmployeeEntity entity = SmartBeanUtil.copy(employeeAddForm, EmployeeEntity.class);
// 员工uid
String employeeUid = cn.hutool.core.lang.UUID.randomUUID(true).toString(true);
entity.setEmployeeUid(employeeUid);
// 设置密码 默认密码
String password = securityPasswordService.randomPassword();
entity.setLoginPwd(SecurityPasswordService.getEncryptPwd(password));
// 设置密码 随机密码
String randomPassword = securityPasswordService.randomPassword();
String generateSaltPassword = this.generateSaltPassword(randomPassword, employeeUid);
entity.setLoginPwd(SecurityPasswordService.getEncryptPwd(generateSaltPassword));
// 保存数据
entity.setDeletedFlag(Boolean.FALSE);
employeeManager.saveEmployee(entity, employeeAddForm.getRoleIdList());
return ResponseDTO.ok(password);
return ResponseDTO.ok(randomPassword);
}
/**
@@ -241,7 +245,6 @@ public class EmployeeService {
/**
* 更新登录人头像
*
*/
public ResponseDTO<String> updateAvatar(EmployeeUpdateAvatarForm employeeUpdateAvatarForm) {
Long employeeId = employeeUpdateAvatarForm.getEmployeeId();
@@ -343,12 +346,12 @@ public class EmployeeService {
}
// 校验原始密码
if (!SecurityPasswordService.matchesPwd(updatePasswordForm.getOldPassword(),employeeEntity.getLoginPwd()) ) {
if (!SecurityPasswordService.matchesPwd(this.generateSaltPassword(updatePasswordForm.getOldPassword(), employeeEntity.getEmployeeUid()), employeeEntity.getLoginPwd())) {
return ResponseDTO.userErrorParam("原密码有误,请重新输入");
}
// 新旧密码相同
if (Objects.equals(updatePasswordForm.getOldPassword(), updatePasswordForm.getNewPassword()) ){
if (Objects.equals(updatePasswordForm.getOldPassword(), updatePasswordForm.getNewPassword())) {
return ResponseDTO.userErrorParam("新密码与原始密码相同,请重新输入");
}
@@ -359,14 +362,13 @@ public class EmployeeService {
}
// 根据三级等保规则,校验密码是否重复
ResponseDTO<String> passwordRepeatTimes = securityPasswordService.validatePasswordRepeatTimes(requestUser, updatePasswordForm.getNewPassword());
ResponseDTO<String> passwordRepeatTimes = securityPasswordService.validatePasswordRepeatTimes(requestUser, this.generateSaltPassword(updatePasswordForm.getNewPassword(), employeeEntity.getEmployeeUid()));
if (!passwordRepeatTimes.getOk()) {
return ResponseDTO.error(passwordRepeatTimes);
}
// 更新密码
String newEncryptPassword = SecurityPasswordService.getEncryptPwd(updatePasswordForm.getNewPassword());
String newEncryptPassword = SecurityPasswordService.getEncryptPwd(this.generateSaltPassword(updatePasswordForm.getNewPassword(), employeeEntity.getEmployeeUid()));
EmployeeEntity updateEntity = new EmployeeEntity();
updateEntity.setEmployeeId(employeeId);
updateEntity.setLoginPwd(newEncryptPassword);
@@ -405,8 +407,14 @@ public class EmployeeService {
* 重置密码
*/
public ResponseDTO<String> resetPassword(Long employeeId) {
EmployeeEntity employeeEntity = employeeDao.selectById(employeeId);
if (employeeEntity == null) {
return ResponseDTO.error(UserErrorCode.DATA_NOT_EXIST);
}
String password = securityPasswordService.randomPassword();
employeeDao.updatePassword(employeeId, SecurityPasswordService.getEncryptPwd(password));
String saltPassword = this.generateSaltPassword(password, employeeEntity.getEmployeeUid());
employeeDao.updatePassword(employeeId, SecurityPasswordService.getEncryptPwd(saltPassword));
return ResponseDTO.ok(password);
}
@@ -426,4 +434,14 @@ public class EmployeeService {
return employeeDao.getByLoginName(loginName, false);
}
/**
* 生成加盐密码
* 格式为:[password]_[uid大写]_[uid小写]
*/
public String generateSaltPassword(String password, String employeeUid) {
return password + StringConst.UNDERLINE +
employeeUid.toUpperCase() +
StringConst.UNDERLINE +
employeeUid.toLowerCase();
}
}

View File

@@ -57,7 +57,7 @@ public class LoginController {
return ResponseDTO.ok(loginResult);
}
@Operation(summary = "退出登 @author 卓大")
@Operation(summary = "退出登 @author 卓大")
@GetMapping("/login/logout")
public ResponseDTO<String> logout() {
return loginService.logout(SmartRequestUtil.getRequestUser());

View File

@@ -9,7 +9,6 @@ import cn.hutool.extra.servlet.JakartaServletUtil;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.sa.admin.module.system.department.service.DepartmentService;
import net.lab1024.sa.admin.module.system.employee.domain.entity.EmployeeEntity;
import net.lab1024.sa.admin.module.system.employee.service.EmployeeService;
import net.lab1024.sa.admin.module.system.login.domain.LoginForm;
@@ -38,7 +37,6 @@ import net.lab1024.sa.base.module.support.captcha.CaptchaService;
import net.lab1024.sa.base.module.support.captcha.domain.CaptchaVO;
import net.lab1024.sa.base.module.support.config.ConfigKeyEnum;
import net.lab1024.sa.base.module.support.config.ConfigService;
import net.lab1024.sa.base.module.support.file.service.IFileStorageService;
import net.lab1024.sa.base.module.support.loginlog.LoginLogResultEnum;
import net.lab1024.sa.base.module.support.loginlog.LoginLogService;
import net.lab1024.sa.base.module.support.loginlog.domain.LoginLogEntity;
@@ -79,9 +77,6 @@ public class LoginService implements StpInterface {
@Resource
private EmployeeService employeeService;
@Resource
private DepartmentService departmentService;
@Resource
private CaptchaService captchaService;
@@ -103,9 +98,6 @@ public class LoginService implements StpInterface {
@Resource
private SecurityPasswordService protectPasswordService;
@Resource
private IFileStorageService fileStorageService;
@Resource
private ApiEncryptService apiEncryptService;
@@ -129,7 +121,7 @@ public class LoginService implements StpInterface {
}
/**
* 员工登
* 员工登
*
* @return 返回用户登录信息
*/
@@ -193,7 +185,7 @@ public class LoginService implements StpInterface {
}
// 密码错误
if (!SecurityPasswordService.matchesPwd(requestPassword, employeeEntity.getLoginPwd())) {
if (!SecurityPasswordService.matchesPwd(employeeService.generateSaltPassword(requestPassword, employeeEntity.getEmployeeUid()), employeeEntity.getLoginPwd())) {
// 记录登录失败
saveLoginLog(employeeEntity, ip, userAgent, "密码错误", LoginLogResultEnum.LOGIN_FAIL, loginDeviceEnum);
// 记录等级保护次数
@@ -270,7 +262,7 @@ public class LoginService implements StpInterface {
/**
* 根据登token 获取员请求工信息
* 根据登token 获取员请求工信息
*/
public RequestEmployee getLoginEmployee(String loginId, HttpServletRequest request) {
if (loginId == null) {