|
@@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 用户服务:认证 + 用户管理。
|
|
* 用户服务:认证 + 用户管理。
|
|
@@ -45,6 +46,9 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
|
|
|
private static final Integer FLAG_ON = 1;
|
|
private static final Integer FLAG_ON = 1;
|
|
|
private static final Integer FLAG_OFF = 0;
|
|
private static final Integer FLAG_OFF = 0;
|
|
|
|
|
|
|
|
|
|
+ /** 密码只允许字母、数字(可混合),不限长度 */
|
|
|
|
|
+ private static final Pattern PASSWORD_PATTERN = Pattern.compile("[A-Za-z0-9]+");
|
|
|
|
|
+
|
|
|
private final PasswordEncoder passwordEncoder;
|
|
private final PasswordEncoder passwordEncoder;
|
|
|
|
|
|
|
|
private final CaseInfoMapper caseInfoMapper;
|
|
private final CaseInfoMapper caseInfoMapper;
|
|
@@ -147,7 +151,7 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
|
|
|
if (!passwordEncoder.matches(dto.getOldPwd(), user.getPwdHash())) {
|
|
if (!passwordEncoder.matches(dto.getOldPwd(), user.getPwdHash())) {
|
|
|
throw badRequest("原密码错误");
|
|
throw badRequest("原密码错误");
|
|
|
}
|
|
}
|
|
|
- assertPasswordLength(dto.getNewPwd());
|
|
|
|
|
|
|
+ assertPasswordFormat(dto.getNewPwd());
|
|
|
SysUser update = new SysUser();
|
|
SysUser update = new SysUser();
|
|
|
update.setId(user.getId());
|
|
update.setId(user.getId());
|
|
|
update.setPwdHash(passwordEncoder.encode(dto.getNewPwd()));
|
|
update.setPwdHash(passwordEncoder.encode(dto.getNewPwd()));
|
|
@@ -201,7 +205,7 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
|
|
|
if (StrUtil.isBlank(dto.getPassword())) {
|
|
if (StrUtil.isBlank(dto.getPassword())) {
|
|
|
throw badRequest("密码不能为空");
|
|
throw badRequest("密码不能为空");
|
|
|
}
|
|
}
|
|
|
- assertPasswordLength(dto.getPassword());
|
|
|
|
|
|
|
+ assertPasswordFormat(dto.getPassword());
|
|
|
if (findByUsername(username) != null) {
|
|
if (findByUsername(username) != null) {
|
|
|
throw badRequest("登录名已存在");
|
|
throw badRequest("登录名已存在");
|
|
|
}
|
|
}
|
|
@@ -258,7 +262,7 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
|
|
|
if (StrUtil.isBlank(dto.getNewPassword())) {
|
|
if (StrUtil.isBlank(dto.getNewPassword())) {
|
|
|
throw badRequest("新密码不能为空");
|
|
throw badRequest("新密码不能为空");
|
|
|
}
|
|
}
|
|
|
- assertPasswordLength(dto.getNewPassword());
|
|
|
|
|
|
|
+ assertPasswordFormat(dto.getNewPassword());
|
|
|
SysUser target = getById(dto.getId());
|
|
SysUser target = getById(dto.getId());
|
|
|
if (target == null) {
|
|
if (target == null) {
|
|
|
throw badRequest("用户不存在");
|
|
throw badRequest("用户不存在");
|
|
@@ -389,9 +393,14 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private void assertPasswordLength(String password) {
|
|
|
|
|
- if (password.length() < 6) {
|
|
|
|
|
- throw badRequest("密码长度不能少于 6 位");
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 密码格式校验:只要求「字母 / 数字 / 字母数字组合」,不限长度。
|
|
|
|
|
+ *
|
|
|
|
|
+ * <p>不再限制最短位数 —— 现场习惯用简短口令,长度由管理员自行把握。
|
|
|
|
|
+ */
|
|
|
|
|
+ private void assertPasswordFormat(String password) {
|
|
|
|
|
+ if (StrUtil.isBlank(password) || !PASSWORD_PATTERN.matcher(password).matches()) {
|
|
|
|
|
+ throw badRequest("密码只能由字母或数字组成");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|