1.修复AuthServiceImpl validPhoneOrEmailValidCodeParam方法里判断邮箱是否合法,如果邮箱不合法,返回内容错误,由手机号格式错误改为邮箱格式错误

2.优化CommonResult toString()方法中this.getData()可能出现null的问题
3.修改SysEmailFormatUtil和SysPasswordUtil文件名
修复判断变量错误,应该判断 passwordUpdateComplexity 和 passwordUpdateNotAllowContinuousSame,却判断了 passwordUpdateValidType
修复判断变量错误,应该判断 passwordExpiredNoticeDays,却判断了 passwordExpiredDays
4.修复SysUserServiceImpl loginPositionInfo中判断兼职职位中 异常信息应该输出 slaveOrgId,而不是 slaveSysOrg(此时为 null)
5.修复GlobalExceptionUtil 未知异常判断中日志格式字符串缺少第二个占位符 {}
6.优化SysRelationServiceImpl中saveRelationBatch 当 extJsonList 不为空但长度小于 targetIdList 时,会导致数组越界的问题
This commit is contained in:
wangxu
2026-03-18 14:50:52 +08:00
parent e502180f26
commit 6b7d6b0f5c
8 changed files with 45 additions and 45 deletions

View File

@@ -155,7 +155,7 @@ public class CommonResult<T> implements Serializable{
return "{"
+ "\"code\": " + this.getCode()
+ ", \"msg\": \"" + this.getMsg() + "\""
+ ", \"data\": \"" + this.getData() + "\""
+ ", \"data\": " + (this.getData() != null ? "\"" + this.getData() + "\"" : "null")
+ "}";
}
}

View File

@@ -408,7 +408,7 @@ public class AuthServiceImpl implements AuthService {
}
} else {
if(CommonEmailUtil.isNotEmail(phoneOrEmail)) {
throw new CommonException(AuthExceptionEnum.PHONE_FORMAT_ERROR.getValue());
throw new CommonException(AuthExceptionEnum.EMAIL_FORMAT_ERROR.getValue());
}
}
// 先校验验证码

View File

@@ -24,7 +24,7 @@ import vip.xiaonuo.dev.api.DevConfigApi;
* @author xuyuxiang
* @date 2025/3/21 19:07
**/
public class SysEmailFormatUtl {
public class SysEmailFormatUtil {
/** 系统名称 */
private static final String SNOWY_SYS_NAME_KEY = "SNOWY_SYS_NAME";

View File

@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
* @author xuyuxiang
* @date 2025/3/21 19:07
**/
public class SysPasswordUtl {
public class SysPasswordUtil {
/** B端系统默认密码 */
private static final String SNOWY_SYS_DEFAULT_PASSWORD_FOR_B_KEY = "SNOWY_SYS_DEFAULT_PASSWORD_FOR_B";
@@ -129,13 +129,13 @@ public class SysPasswordUtl {
jsonObject.set(SNOWY_SYS_DEFAULT_PASSWORD_MAX_LENGTH_FOR_B_KEY, passwordUpdateMaxLength);
// 密码复杂度
String passwordUpdateComplexity = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_COMPLEXITY_FOR_B_KEY);
if(ObjectUtil.isEmpty(passwordUpdateValidType)){
if(ObjectUtil.isEmpty(passwordUpdateComplexity)){
throw new CommonException("请联系管理员配置系统密码修改密码复杂度");
}
jsonObject.set(SNOWY_SYS_DEFAULT_PASSWORD_COMPLEXITY_FOR_B_KEY, passwordUpdateComplexity);
// 不能连续出现相同字符个数
String passwordUpdateNotAllowContinuousSame = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_NOT_ALLOW_CONTINUOUS_SAME_CHARACTER_LENGTH_FOR_B_KEY);
if(ObjectUtil.isEmpty(passwordUpdateValidType)){
if(ObjectUtil.isEmpty(passwordUpdateNotAllowContinuousSame)){
throw new CommonException("请联系管理员配置系统密码修改联系出现相同字符的个数");
}
jsonObject.set(SNOWY_SYS_DEFAULT_PASSWORD_NOT_ALLOW_CONTINUOUS_SAME_CHARACTER_LENGTH_FOR_B_KEY, passwordUpdateNotAllowContinuousSame);
@@ -396,7 +396,7 @@ public class SysPasswordUtl {
// 获取密码过期前提醒天数
String passwordExpiredNoticeDays = devConfigApi.getValueByKey(SNOWY_SYS_DEFAULT_PASSWORD_EXPIRED_NOTICE_DAYS_FOR_B_KEY);
// 密码过期前提醒天数如果不为空
if(ObjectUtil.isNotEmpty(passwordExpiredDays)){
if(ObjectUtil.isNotEmpty(passwordExpiredNoticeDays)){
// 获取密码修改日期距离提醒日的天数N
int noticeOffsetDays = Convert.toInt(passwordExpiredDays) - Convert.toInt(passwordExpiredNoticeDays);
// 提前提醒天数必须大于过期天数

View File

@@ -62,7 +62,7 @@ public class SysRelationServiceImpl extends ServiceImpl<SysRelationMapper, SysRe
sysRelation.setObjectId(objectId);
sysRelation.setTargetId(targetIdList.get(i));
sysRelation.setCategory(category);
if(ObjectUtil.isNotEmpty(extJsonList)) {
if(ObjectUtil.isNotEmpty(extJsonList) && extJsonList.size() > i) {
sysRelation.setExtJson(extJsonList.get(i));
}
sysRelationList.add(sysRelation);

View File

@@ -2,7 +2,7 @@ package vip.xiaonuo.sys.modular.sys;
import org.springframework.stereotype.Service;
import vip.xiaonuo.sys.api.SysApi;
import vip.xiaonuo.sys.core.util.SysPasswordUtl;
import vip.xiaonuo.sys.core.util.SysPasswordUtil;
/**
* 系统模块综合API接口实现类
@@ -15,6 +15,6 @@ public class SysApiProvider implements SysApi {
@Override
public String getDefaultPassword() {
return SysPasswordUtl.getDefaultPassword();
return SysPasswordUtil.getDefaultPassword();
}
}

View File

@@ -84,8 +84,8 @@ import vip.xiaonuo.mobile.api.MobileMenuApi;
import vip.xiaonuo.sys.core.enums.SysBuildInEnum;
import vip.xiaonuo.sys.core.enums.SysDataTypeEnum;
import vip.xiaonuo.sys.core.enums.SysYesOrNoEnum;
import vip.xiaonuo.sys.core.util.SysEmailFormatUtl;
import vip.xiaonuo.sys.core.util.SysPasswordUtl;
import vip.xiaonuo.sys.core.util.SysEmailFormatUtil;
import vip.xiaonuo.sys.core.util.SysPasswordUtil;
import vip.xiaonuo.sys.modular.group.entity.SysGroup;
import vip.xiaonuo.sys.modular.group.service.SysGroupService;
import vip.xiaonuo.sys.modular.org.entity.SysOrg;
@@ -338,7 +338,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
if(ObjectUtil.isEmpty(sysUser.getPassword())) {
// 设置默认密码
sysUser.setPassword(CommonCryptogramUtil.doHashValue(SysPasswordUtl.getDefaultPassword()));
sysUser.setPassword(CommonCryptogramUtil.doHashValue(SysPasswordUtil.getDefaultPassword()));
} else {
// 设置传入的密码
sysUser.setPassword(CommonCryptogramUtil.doHashValue(sysUser.getPassword()));
@@ -490,7 +490,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 获取用户
SysUser sysUser = this.queryEntity(sysUserIdParam.getId());
// 获取默认密码
String defaultPassword = SysPasswordUtl.getDefaultPassword();
String defaultPassword = SysPasswordUtil.getDefaultPassword();
// 修改密码
this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId,
sysUserIdParam.getId()).set(SysUser::getPassword,
@@ -533,9 +533,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 定义变量参数
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("userNewPassword", defaultPassword);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);
try {
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
@@ -690,9 +690,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("validCode", emailValidCode)
.set("validTime", validCodeExpiredDuration/60);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
// 将请求号作为key验证码的值作为value放到redis用于校验
@@ -719,7 +719,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 获取新密码
String newPassword = CommonCryptogramUtil.doSm2Decrypt(sysUserFindPwdByPhoneParam.getNewPassword()).trim();
// 校验新密码
SysPasswordUtl.validNewPassword(sysLoginUser, newPassword);
SysPasswordUtil.validNewPassword(sysLoginUser, newPassword);
// 修改密码
this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getPhone,
CommonCryptogramUtil.doSm4CbcEncrypt(phone)).set(SysUser::getPassword,
@@ -771,7 +771,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserExtService.updatePasswordLastTime(sysLoginUser.getId());
// 追加用户历史密码信息
sysUserPasswordService.insertUserPasswordHistory(sysLoginUser.getId(), newPassword);
SysPasswordUtl.validNewPassword(sysLoginUser, newPassword);
SysPasswordUtil.validNewPassword(sysLoginUser, newPassword);
// 修改密码
this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getEmail, email).set(SysUser::getPassword,
CommonCryptogramUtil.doHashValue(newPassword)));
@@ -784,9 +784,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 定义变量参数
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("userNewPassword", newPassword);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
try {
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
@@ -799,21 +799,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public String updatePasswordGetPhoneValidCode(SysUserGetPhoneValidCodeParam sysUserGetPhoneValidCodeParam) {
// 判断密码验证方式
SysPasswordUtl.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.PHONE.getValue());
SysPasswordUtil.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.PHONE.getValue());
return this.getPhoneValidCode(sysUserGetPhoneValidCodeParam, "修改密码验证码短信消息模板编码", SNOWY_SMS_TEMPLATE_VALID_CODE_UPDATE_PASSWORD_FOR_B_KEY);
}
@Override
public String updatePasswordGetEmailValidCode(SysUserGetEmailValidCodeParam sysUserGetEmailValidCodeParam) {
// 判断密码验证方式
SysPasswordUtl.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.EMAIL.getValue());
SysPasswordUtil.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.EMAIL.getValue());
return this.getEmailValidCode(sysUserGetEmailValidCodeParam, "修改密码验证码邮件消息模板内容", SNOWY_EMAIL_TEMPLATE_VALID_CODE_UPDATE_PASSWORD_FOR_B_KEY);
}
@Override
public void updatePasswordByOld(SysUserUpdatePwdByOldParam sysUserUpdatePwdByOldParam) {
// 判断密码验证方式
SysPasswordUtl.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.OLD.getValue());
SysPasswordUtil.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.OLD.getValue());
SysUser sysUser = this.queryEntity(StpUtil.getLoginIdAsString());
String password = CommonCryptogramUtil.doSm2Decrypt(sysUserUpdatePwdByOldParam.getPassword()).trim();
String newPassword = CommonCryptogramUtil.doSm2Decrypt(sysUserUpdatePwdByOldParam.getNewPassword()).trim();
@@ -821,7 +821,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
throw new CommonException("原密码错误");
}
// 校验新密码
SysPasswordUtl.validNewPassword(sysUser, newPassword);
SysPasswordUtil.validNewPassword(sysUser, newPassword);
// 修改密码
this.update(new LambdaUpdateWrapper<SysUser>().eq(SysUser::getId,
sysUser.getId()).set(SysUser::getPassword,
@@ -868,9 +868,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 定义变量参数
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("userNewPassword", newPassword);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
try {
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
@@ -884,7 +884,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public void updatePasswordByPhone(SysUserUpdatePwdByPhoneParam sysUserUpdatePwdByPhoneParam) {
// 判断密码验证方式
SysPasswordUtl.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.PHONE.getValue());
SysPasswordUtil.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.PHONE.getValue());
SysUserFindPwdByPhoneParam sysUserFindPwdByPhoneParam = new SysUserFindPwdByPhoneParam();
BeanUtil.copyProperties(sysUserUpdatePwdByPhoneParam, sysUserFindPwdByPhoneParam);
this.findPasswordByPhone(sysUserFindPwdByPhoneParam);
@@ -893,7 +893,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public void updatePasswordByEmail(SysUserUpdatePwdByEmailParam sysUserUpdatePwdByEmailParam) {
// 判断密码验证方式
SysPasswordUtl.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.EMAIL.getValue());
SysPasswordUtil.validUpdatePasswordValidType(SysUpdatePasswordValidTypeEnum.EMAIL.getValue());
SysUserFindPwdByEmailParam sysUserFindPwdByEmailParam = new SysUserFindPwdByEmailParam();
BeanUtil.copyProperties(sysUserUpdatePwdByEmailParam, sysUserFindPwdByEmailParam);
this.findPasswordByEmail(sysUserFindPwdByEmailParam);
@@ -1029,9 +1029,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("validCode", emailValidCode)
.set("validTime", validCodeExpiredDuration/60);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
// 将请求号作为key验证码的值作为value放到redis用于校验
@@ -1071,9 +1071,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email).set("validCode", emailValidCode)
.set("validTime", validCodeExpiredDuration/60);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
// 将请求号作为key验证码的值作为value放到redis用于校验
@@ -1712,7 +1712,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 设置默认头像
sysUser.setAvatar(CommonAvatarUtil.generateImg(sysUser.getName()));
// 设置默认密码
sysUser.setPassword(CommonCryptogramUtil.doHashValue(SysPasswordUtl.getDefaultPassword()));
sysUser.setPassword(CommonCryptogramUtil.doHashValue(SysPasswordUtil.getDefaultPassword()));
// 设置排序码
sysUser.setSortCode(99);
// 设置状态
@@ -1977,7 +1977,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
SysOrg slaveSysOrg = sysOrgService.getById(sysOrgList, slaveOrgId);
if (ObjectUtil.isEmpty(slaveSysOrg)) {
throw new CommonException("组织不存在id值为{}", slaveSysOrg);
throw new CommonException("组织不存在id值为{}", slaveOrgId);
}
String slaveOrgName = slaveSysOrg.getName();
@@ -2240,9 +2240,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 定义变量参数
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
}
@@ -2351,7 +2351,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public Boolean isUserPasswordExpired() {
return SysPasswordUtl.isUserPasswordExpired(StpUtil.getLoginIdAsString());
return SysPasswordUtil.isUserPasswordExpired(StpUtil.getLoginIdAsString());
}
@Override
@@ -2361,7 +2361,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 密码即将到期邮件消息模板
String emailTemplateContent = devConfigApi.getValueByKey(SNOWY_EMAIL_TEMPLATE_NOTICE_PASSWORD_EXPIRED_FOR_B_KEY);
// 获取今日需要提醒密码到期的用户集合
SysPasswordUtl.thisDayPasswordExpiredNeedNoticeUserIdList().forEach(sysUser -> {
SysPasswordUtil.thisDayPasswordExpiredNeedNoticeUserIdList().forEach(sysUser -> {
// 获取手机号
String phone = sysUser.getPhone();
// 不为空才发送
@@ -2391,9 +2391,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 定义变量参数
JSONObject paramMap = JSONUtil.createObj().set("userEmail", email);
// 获取格式化后的主题
String subject = SysEmailFormatUtl.format(contentJSONObject.getStr("subject"), paramMap);;
String subject = SysEmailFormatUtil.format(contentJSONObject.getStr("subject"), paramMap);;
// 获取格式化后的内容
String content = SysEmailFormatUtl.format(contentJSONObject.getStr("content"), paramMap);;
String content = SysEmailFormatUtil.format(contentJSONObject.getStr("content"), paramMap);;
try {
// 发送邮件
devEmailApi.sendDynamicHtmlEmail(email, subject, content);
@@ -2413,14 +2413,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
throw new CommonException("账号已存在");
}
// 校验密码
SysPasswordUtl.validNewPassword(password);
SysPasswordUtil.validNewPassword(password);
// 根据账号密码创建用户
this.createUserWithAccount(account, password);
}
@Override
public JSONObject getUpdatePasswordValidConfig() {
return SysPasswordUtl.getUpdatePasswordValidConfig();
return SysPasswordUtil.getUpdatePasswordValidConfig();
}
@Override

View File

@@ -137,7 +137,7 @@ public class GlobalExceptionUtil {
commonResult = CommonResult.get(commonException.getCode(), commonException.getMsg(), null);
} else {
// 未知异常打印详情
log.error(">>> 服务器未知异常,请求地址:{},具体信息:", CommonServletUtil.getRequest().getRequestURL(), e);
log.error(">>> 服务器未知异常,请求地址:{},具体信息:{}", CommonServletUtil.getRequest().getRequestURL(), e);
// 未知异常返回服务器异常
commonResult = CommonResult.error();
}