优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量及包命名
1.编程规约>常量定义>第4条: 【推荐】不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。 说明:大而全的常量类,杂乱无章,使用查找功能才能定位到要修改的常量,不利于理解,也不利于维护。 正例:缓存相关常量放在类 CacheConsts 下;系统配置相关常量放在类 SystemConfigConsts 下。 2.编程规约>常量定义>第5条: 【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常 量、类内共享常量。 1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。 2)应用内共享常量:放置在一方库中,通常是子模块中的 constant 目录下。 反例:易懂常量也要统一定义成应用内共享常量,两个程序员在两个类中分别定义了表示“是”的常量: 类 A 中:public static final String YES = "yes"; 类 B 中:public static final String YES = "y"; A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致线上问题。 3)子工程内部共享常量:即在当前子工程的 constant 目录下。 4)包内共享常量:即在当前包下单独的 constant 目录下。 5)类内共享常量:直接在类内部 private static final 定义。
This commit is contained in:
parent
94be1f9553
commit
1257a4bc35
@ -239,7 +239,7 @@ continew-admin # 全局通用项目配置及依赖版本管理
|
|||||||
│ │ ├─ mybatis # MyBatis Plus 配置
|
│ │ ├─ mybatis # MyBatis Plus 配置
|
||||||
│ │ ├─ threadpool # 线程池配置
|
│ │ ├─ threadpool # 线程池配置
|
||||||
│ │ └─ properties # 公共配置属性
|
│ │ └─ properties # 公共配置属性
|
||||||
│ ├─ consts # 公共常量
|
│ ├─ constant # 公共常量
|
||||||
│ ├─ enums # 公共枚举
|
│ ├─ enums # 公共枚举
|
||||||
│ ├─ exception # 公共异常
|
│ ├─ exception # 公共异常
|
||||||
│ ├─ handler # 公共处理器
|
│ ├─ handler # 公共处理器
|
||||||
|
BIN
code-style/Java开发手册(黄山版).pdf
Normal file
BIN
code-style/Java开发手册(黄山版).pdf
Normal file
Binary file not shown.
@ -14,19 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.charles7c.cnadmin.common.consts;
|
package top.charles7c.cnadmin.common.constant;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缓存键常量
|
* 缓存相关常量
|
||||||
*
|
*
|
||||||
* @author Charles7c
|
* @author Charles7c
|
||||||
* @since 2022/12/22 19:30
|
* @since 2022/12/22 19:30
|
||||||
*/
|
*/
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class CacheConstants {
|
public class CacheConsts {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录用户缓存键
|
* 登录用户缓存键
|
||||||
@ -42,5 +42,4 @@ public class CacheConstants {
|
|||||||
* 限流缓存键
|
* 限流缓存键
|
||||||
*/
|
*/
|
||||||
public static final String LIMIT_CACHE_KEY = "LIMIT";
|
public static final String LIMIT_CACHE_KEY = "LIMIT";
|
||||||
|
|
||||||
}
|
}
|
@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.charles7c.cnadmin.common.consts;
|
package top.charles7c.cnadmin.common.constant;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@ -22,13 +22,13 @@ import lombok.NoArgsConstructor;
|
|||||||
import cn.hutool.core.text.CharPool;
|
import cn.hutool.core.text.CharPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字符常量
|
* 字符相关常量
|
||||||
*
|
*
|
||||||
* @author Charles7c
|
* @author Charles7c
|
||||||
* @since 2023/2/10 20:14
|
* @since 2023/2/10 20:14
|
||||||
*/
|
*/
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class CharConstants implements CharPool {
|
public class CharConsts implements CharPool {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分号
|
* 分号
|
@ -14,23 +14,22 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.charles7c.cnadmin.common.consts;
|
package top.charles7c.cnadmin.common.constant;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 文件常量
|
* 文件相关常量
|
||||||
*
|
*
|
||||||
* @author Charles7c
|
* @author Charles7c
|
||||||
* @since 2023/1/2 21:19
|
* @since 2023/1/2 21:19
|
||||||
*/
|
*/
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class FileConstants {
|
public class FileConsts {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 头像支持的图片类型
|
* 头像支持的图片类型
|
||||||
*/
|
*/
|
||||||
public static final String[] AVATAR_SUPPORTED_IMG_TYPES = {"jpg", "png", "gif", "jpeg"};
|
public static final String[] AVATAR_SUPPORTED_IMG_TYPES = {"jpg", "png", "gif", "jpeg"};
|
||||||
|
|
||||||
}
|
}
|
@ -14,17 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.charles7c.cnadmin.common.consts;
|
package top.charles7c.cnadmin.common.constant;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 正则相关常量
|
||||||
|
*
|
||||||
* @author Charles7c
|
* @author Charles7c
|
||||||
* @since 2023/1/10 20:06
|
* @since 2023/1/10 20:06
|
||||||
*/
|
*/
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class RegExpConstants {
|
public class RegExpConsts {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 密码正则(必须包含字母和数字的组合,可以使用特殊字符,长度在6-32之间)
|
* 密码正则(必须包含字母和数字的组合,可以使用特殊字符,长度在6-32之间)
|
@ -14,19 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package top.charles7c.cnadmin.common.consts;
|
package top.charles7c.cnadmin.common.constant;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统常量
|
* 系统相关常量
|
||||||
*
|
*
|
||||||
* @author Charles7c
|
* @author Charles7c
|
||||||
* @since 2023/2/9 22:11
|
* @since 2023/2/9 22:11
|
||||||
*/
|
*/
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class Constants {
|
public class SysConsts {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超级管理员角色编码
|
* 超级管理员角色编码
|
@ -30,7 +30,7 @@ import org.springframework.data.domain.Sort;
|
|||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.consts.CharConstants;
|
import top.charles7c.cnadmin.common.constant.CharConsts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 排序查询条件
|
* 排序查询条件
|
||||||
@ -62,10 +62,10 @@ public class SortQuery implements Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Sort.Order> orders = new ArrayList<>(sort.length);
|
List<Sort.Order> orders = new ArrayList<>(sort.length);
|
||||||
if (StrUtil.contains(sort[0], CharConstants.COMMA)) {
|
if (StrUtil.contains(sort[0], CharConsts.COMMA)) {
|
||||||
// e.g "sort=published,desc&sort=title,asc"
|
// e.g "sort=published,desc&sort=title,asc"
|
||||||
for (String s : sort) {
|
for (String s : sort) {
|
||||||
List<String> sortList = StrUtil.split(s, CharConstants.COMMA);
|
List<String> sortList = StrUtil.split(s, CharConsts.COMMA);
|
||||||
Sort.Order order =
|
Sort.Order order =
|
||||||
new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0));
|
new Sort.Order(Sort.Direction.valueOf(sortList.get(1).toUpperCase()), sortList.get(0));
|
||||||
orders.add(order);
|
orders.add(order);
|
||||||
|
@ -37,7 +37,7 @@ import cn.hutool.core.util.ArrayUtil;
|
|||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.consts.CharConstants;
|
import top.charles7c.cnadmin.common.constant.CharConsts;
|
||||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -233,10 +233,10 @@ public class MailUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<String> result;
|
List<String> result;
|
||||||
if (StrUtil.contains(addresses, CharConstants.COMMA)) {
|
if (StrUtil.contains(addresses, CharConsts.COMMA)) {
|
||||||
result = StrUtil.splitTrim(addresses, CharConstants.COMMA);
|
result = StrUtil.splitTrim(addresses, CharConsts.COMMA);
|
||||||
} else if (StrUtil.contains(addresses, CharConstants.SEMICOLON)) {
|
} else if (StrUtil.contains(addresses, CharConsts.SEMICOLON)) {
|
||||||
result = StrUtil.splitTrim(addresses, CharConstants.SEMICOLON);
|
result = StrUtil.splitTrim(addresses, CharConsts.SEMICOLON);
|
||||||
} else {
|
} else {
|
||||||
result = CollUtil.newArrayList(addresses);
|
result = CollUtil.newArrayList(addresses);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ import cn.dev33.satoken.context.SaHolder;
|
|||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.extra.servlet.ServletUtil;
|
import cn.hutool.extra.servlet.ServletUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.consts.CacheConstants;
|
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||||
import top.charles7c.cnadmin.common.model.dto.LogContext;
|
import top.charles7c.cnadmin.common.model.dto.LogContext;
|
||||||
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
||||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||||
@ -66,8 +66,8 @@ public class LoginHelper {
|
|||||||
// 登录保存用户信息
|
// 登录保存用户信息
|
||||||
StpUtil.login(loginUser.getUserId());
|
StpUtil.login(loginUser.getUserId());
|
||||||
loginUser.setToken(StpUtil.getTokenValue());
|
loginUser.setToken(StpUtil.getTokenValue());
|
||||||
SaHolder.getStorage().set(CacheConstants.LOGIN_USER_CACHE_KEY, loginUser);
|
SaHolder.getStorage().set(CacheConsts.LOGIN_USER_CACHE_KEY, loginUser);
|
||||||
StpUtil.getTokenSession().set(CacheConstants.LOGIN_USER_CACHE_KEY, loginUser);
|
StpUtil.getTokenSession().set(CacheConsts.LOGIN_USER_CACHE_KEY, loginUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,13 +76,13 @@ public class LoginHelper {
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
public static LoginUser getLoginUser() {
|
public static LoginUser getLoginUser() {
|
||||||
LoginUser loginUser = (LoginUser)SaHolder.getStorage().get(CacheConstants.LOGIN_USER_CACHE_KEY);
|
LoginUser loginUser = (LoginUser)SaHolder.getStorage().get(CacheConsts.LOGIN_USER_CACHE_KEY);
|
||||||
if (loginUser != null) {
|
if (loginUser != null) {
|
||||||
return loginUser;
|
return loginUser;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
loginUser = (LoginUser)StpUtil.getTokenSession().get(CacheConstants.LOGIN_USER_CACHE_KEY);
|
loginUser = (LoginUser)StpUtil.getTokenSession().get(CacheConsts.LOGIN_USER_CACHE_KEY);
|
||||||
SaHolder.getStorage().set(CacheConstants.LOGIN_USER_CACHE_KEY, loginUser);
|
SaHolder.getStorage().set(CacheConsts.LOGIN_USER_CACHE_KEY, loginUser);
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
}
|
}
|
||||||
return loginUser;
|
return loginUser;
|
||||||
@ -95,8 +95,8 @@ public class LoginHelper {
|
|||||||
* 登录用户信息
|
* 登录用户信息
|
||||||
*/
|
*/
|
||||||
public static void updateLoginUser(LoginUser loginUser) {
|
public static void updateLoginUser(LoginUser loginUser) {
|
||||||
SaHolder.getStorage().set(CacheConstants.LOGIN_USER_CACHE_KEY, loginUser);
|
SaHolder.getStorage().set(CacheConsts.LOGIN_USER_CACHE_KEY, loginUser);
|
||||||
StpUtil.getTokenSession().set(CacheConstants.LOGIN_USER_CACHE_KEY, loginUser);
|
StpUtil.getTokenSession().set(CacheConsts.LOGIN_USER_CACHE_KEY, loginUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,7 +25,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.auth.service.PermissionService;
|
import top.charles7c.cnadmin.auth.service.PermissionService;
|
||||||
import top.charles7c.cnadmin.common.consts.Constants;
|
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||||
import top.charles7c.cnadmin.system.service.MenuService;
|
import top.charles7c.cnadmin.system.service.MenuService;
|
||||||
import top.charles7c.cnadmin.system.service.RoleService;
|
import top.charles7c.cnadmin.system.service.RoleService;
|
||||||
|
|
||||||
@ -46,8 +46,8 @@ public class PermissionServiceImpl implements PermissionService {
|
|||||||
public Set<String> listPermissionsByUserId(Long userId) {
|
public Set<String> listPermissionsByUserId(Long userId) {
|
||||||
Set<String> roleCodeSet = this.listRoleCodesByUserId(userId);
|
Set<String> roleCodeSet = this.listRoleCodesByUserId(userId);
|
||||||
// 超级管理员赋予全部权限
|
// 超级管理员赋予全部权限
|
||||||
if (roleCodeSet.contains(Constants.SUPER_ADMIN)) {
|
if (roleCodeSet.contains(SysConsts.SUPER_ADMIN)) {
|
||||||
return CollUtil.newHashSet(Constants.ALL_PERMISSION);
|
return CollUtil.newHashSet(SysConsts.ALL_PERMISSION);
|
||||||
}
|
}
|
||||||
return menuService.listPermissionsByUserId(userId);
|
return menuService.listPermissionsByUserId(userId);
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.base.BaseVO;
|
import top.charles7c.cnadmin.common.base.BaseVO;
|
||||||
import top.charles7c.cnadmin.common.consts.Constants;
|
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||||
import top.charles7c.cnadmin.common.enums.DataScopeEnum;
|
import top.charles7c.cnadmin.common.enums.DataScopeEnum;
|
||||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ public class RoleVO extends BaseVO {
|
|||||||
private Boolean disabled;
|
private Boolean disabled;
|
||||||
|
|
||||||
public Boolean getDisabled() {
|
public Boolean getDisabled() {
|
||||||
if (Constants.SUPER_ADMIN.equals(roleCode)) {
|
if (SysConsts.SUPER_ADMIN.equals(roleCode)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return disabled;
|
return disabled;
|
||||||
|
@ -29,7 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
||||||
import top.charles7c.cnadmin.common.consts.Constants;
|
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||||
import top.charles7c.cnadmin.common.model.vo.LabelValueVO;
|
import top.charles7c.cnadmin.common.model.vo.LabelValueVO;
|
||||||
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
|
||||||
@ -136,7 +136,7 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
|
|||||||
if (detailObj instanceof RoleDetailVO) {
|
if (detailObj instanceof RoleDetailVO) {
|
||||||
RoleDetailVO detailVO = (RoleDetailVO)detailObj;
|
RoleDetailVO detailVO = (RoleDetailVO)detailObj;
|
||||||
Long roleId = detailVO.getRoleId();
|
Long roleId = detailVO.getRoleId();
|
||||||
if (Constants.SUPER_ADMIN.equals(detailVO.getRoleCode())) {
|
if (SysConsts.SUPER_ADMIN.equals(detailVO.getRoleCode())) {
|
||||||
List<MenuVO> list = menuService.list(null, null);
|
List<MenuVO> list = menuService.list(null, null);
|
||||||
List<Long> menuIds = list.stream().map(MenuVO::getMenuId).collect(Collectors.toList());
|
List<Long> menuIds = list.stream().map(MenuVO::getMenuId).collect(Collectors.toList());
|
||||||
detailVO.setMenuIds(menuIds);
|
detailVO.setMenuIds(menuIds);
|
||||||
|
@ -34,8 +34,8 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
|
|
||||||
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
|
||||||
import top.charles7c.cnadmin.common.config.properties.LocalStorageProperties;
|
import top.charles7c.cnadmin.common.config.properties.LocalStorageProperties;
|
||||||
import top.charles7c.cnadmin.common.consts.Constants;
|
import top.charles7c.cnadmin.common.constant.FileConsts;
|
||||||
import top.charles7c.cnadmin.common.consts.FileConstants;
|
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||||
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
||||||
import top.charles7c.cnadmin.common.service.CommonUserService;
|
import top.charles7c.cnadmin.common.service.CommonUserService;
|
||||||
@ -81,7 +81,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
|
|||||||
request.setStatus(DisEnableStatusEnum.ENABLE);
|
request.setStatus(DisEnableStatusEnum.ENABLE);
|
||||||
Long userId = super.add(request);
|
Long userId = super.add(request);
|
||||||
super.lambdaUpdate()
|
super.lambdaUpdate()
|
||||||
.set(UserDO::getPassword, SecureUtils.md5Salt(Constants.DEFAULT_PASSWORD, userId.toString()))
|
.set(UserDO::getPassword, SecureUtils.md5Salt(SysConsts.DEFAULT_PASSWORD, userId.toString()))
|
||||||
.set(UserDO::getPwdResetTime, LocalDateTime.now()).eq(UserDO::getUserId, userId).update();
|
.set(UserDO::getPwdResetTime, LocalDateTime.now()).eq(UserDO::getUserId, userId).update();
|
||||||
// 保存用户和角色关联
|
// 保存用户和角色关联
|
||||||
userRoleService.save(request.getRoleIds(), userId);
|
userRoleService.save(request.getRoleIds(), userId);
|
||||||
@ -139,7 +139,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
|
|||||||
CheckUtils.throwIf(() -> avatarFile.getSize() > avatarMaxSizeInMb * 1024 * 1024,
|
CheckUtils.throwIf(() -> avatarFile.getSize() > avatarMaxSizeInMb * 1024 * 1024,
|
||||||
String.format("请上传小于 %s MB 的图片", avatarMaxSizeInMb));
|
String.format("请上传小于 %s MB 的图片", avatarMaxSizeInMb));
|
||||||
String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename());
|
String avatarImageType = FileNameUtil.extName(avatarFile.getOriginalFilename());
|
||||||
String[] avatarSupportImgTypes = FileConstants.AVATAR_SUPPORTED_IMG_TYPES;
|
String[] avatarSupportImgTypes = FileConsts.AVATAR_SUPPORTED_IMG_TYPES;
|
||||||
CheckUtils.throwIf(() -> !StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportImgTypes),
|
CheckUtils.throwIf(() -> !StrUtil.equalsAnyIgnoreCase(avatarImageType, avatarSupportImgTypes),
|
||||||
String.format("头像仅支持 %s 格式的图片", String.join(",", avatarSupportImgTypes)));
|
String.format("头像仅支持 %s 格式的图片", String.join(",", avatarSupportImgTypes)));
|
||||||
|
|
||||||
@ -206,7 +206,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
|
|||||||
@Override
|
@Override
|
||||||
public void resetPassword(Long userId) {
|
public void resetPassword(Long userId) {
|
||||||
UserDO userDO = super.getById(userId);
|
UserDO userDO = super.getById(userId);
|
||||||
userDO.setPassword(SecureUtils.md5Salt(Constants.DEFAULT_PASSWORD, userId.toString()));
|
userDO.setPassword(SecureUtils.md5Salt(SysConsts.DEFAULT_PASSWORD, userId.toString()));
|
||||||
userDO.setPwdResetTime(LocalDateTime.now());
|
userDO.setPwdResetTime(LocalDateTime.now());
|
||||||
baseMapper.updateById(userDO);
|
baseMapper.updateById(userDO);
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import top.charles7c.cnadmin.auth.model.request.LoginRequest;
|
|||||||
import top.charles7c.cnadmin.auth.model.vo.LoginVO;
|
import top.charles7c.cnadmin.auth.model.vo.LoginVO;
|
||||||
import top.charles7c.cnadmin.auth.model.vo.UserInfoVO;
|
import top.charles7c.cnadmin.auth.model.vo.UserInfoVO;
|
||||||
import top.charles7c.cnadmin.auth.service.LoginService;
|
import top.charles7c.cnadmin.auth.service.LoginService;
|
||||||
import top.charles7c.cnadmin.common.consts.CacheConstants;
|
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||||
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
||||||
import top.charles7c.cnadmin.common.model.vo.R;
|
import top.charles7c.cnadmin.common.model.vo.R;
|
||||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||||
@ -62,7 +62,7 @@ public class LoginController {
|
|||||||
@PostMapping("/login")
|
@PostMapping("/login")
|
||||||
public R<LoginVO> login(@Validated @RequestBody LoginRequest loginRequest) {
|
public R<LoginVO> login(@Validated @RequestBody LoginRequest loginRequest) {
|
||||||
// 校验验证码
|
// 校验验证码
|
||||||
String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_CACHE_KEY, loginRequest.getUuid());
|
String captchaKey = RedisUtils.formatKey(CacheConsts.CAPTCHA_CACHE_KEY, loginRequest.getUuid());
|
||||||
String captcha = RedisUtils.getCacheObject(captchaKey);
|
String captcha = RedisUtils.getCacheObject(captchaKey);
|
||||||
ValidationUtils.throwIfBlank(captcha, "验证码已失效");
|
ValidationUtils.throwIfBlank(captcha, "验证码已失效");
|
||||||
RedisUtils.deleteCacheObject(captchaKey);
|
RedisUtils.deleteCacheObject(captchaKey);
|
||||||
|
@ -42,7 +42,7 @@ import cn.hutool.core.util.RandomUtil;
|
|||||||
|
|
||||||
import top.charles7c.cnadmin.common.config.properties.CaptchaProperties;
|
import top.charles7c.cnadmin.common.config.properties.CaptchaProperties;
|
||||||
import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties;
|
import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties;
|
||||||
import top.charles7c.cnadmin.common.consts.CacheConstants;
|
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||||
import top.charles7c.cnadmin.common.model.vo.CaptchaVO;
|
import top.charles7c.cnadmin.common.model.vo.CaptchaVO;
|
||||||
import top.charles7c.cnadmin.common.model.vo.R;
|
import top.charles7c.cnadmin.common.model.vo.R;
|
||||||
import top.charles7c.cnadmin.common.util.*;
|
import top.charles7c.cnadmin.common.util.*;
|
||||||
@ -74,7 +74,7 @@ public class CaptchaController {
|
|||||||
|
|
||||||
// 保存验证码
|
// 保存验证码
|
||||||
String uuid = IdUtil.fastSimpleUUID();
|
String uuid = IdUtil.fastSimpleUUID();
|
||||||
String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_CACHE_KEY, uuid);
|
String captchaKey = RedisUtils.formatKey(CacheConsts.CAPTCHA_CACHE_KEY, uuid);
|
||||||
RedisUtils.setCacheObject(captchaKey, captcha.text(),
|
RedisUtils.setCacheObject(captchaKey, captcha.text(),
|
||||||
Duration.ofMinutes(captchaImage.getExpirationInMinutes()));
|
Duration.ofMinutes(captchaImage.getExpirationInMinutes()));
|
||||||
|
|
||||||
@ -88,8 +88,8 @@ public class CaptchaController {
|
|||||||
public R getMailCaptcha(
|
public R getMailCaptcha(
|
||||||
@NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email)
|
@NotBlank(message = "邮箱不能为空") @Pattern(regexp = RegexPool.EMAIL, message = "邮箱格式错误") String email)
|
||||||
throws MessagingException {
|
throws MessagingException {
|
||||||
String limitCacheKey = CacheConstants.LIMIT_CACHE_KEY;
|
String limitCacheKey = CacheConsts.LIMIT_CACHE_KEY;
|
||||||
String captchaCacheKey = CacheConstants.CAPTCHA_CACHE_KEY;
|
String captchaCacheKey = CacheConsts.CAPTCHA_CACHE_KEY;
|
||||||
String limitCaptchaKey = RedisUtils.formatKey(limitCacheKey, captchaCacheKey, email);
|
String limitCaptchaKey = RedisUtils.formatKey(limitCacheKey, captchaCacheKey, email);
|
||||||
long limitTimeInMillisecond = RedisUtils.getTimeToLive(limitCaptchaKey);
|
long limitTimeInMillisecond = RedisUtils.getTimeToLive(limitCaptchaKey);
|
||||||
CheckUtils.throwIf(() -> limitTimeInMillisecond > 0,
|
CheckUtils.throwIf(() -> limitTimeInMillisecond > 0,
|
||||||
@ -106,7 +106,7 @@ public class CaptchaController {
|
|||||||
MailUtils.sendHtml(email, String.format("【%s】邮箱验证码", properties.getName()), content);
|
MailUtils.sendHtml(email, String.format("【%s】邮箱验证码", properties.getName()), content);
|
||||||
|
|
||||||
// 保存验证码
|
// 保存验证码
|
||||||
String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_CACHE_KEY, email);
|
String captchaKey = RedisUtils.formatKey(CacheConsts.CAPTCHA_CACHE_KEY, email);
|
||||||
RedisUtils.setCacheObject(captchaKey, captcha, Duration.ofMinutes(expirationInMinutes));
|
RedisUtils.setCacheObject(captchaKey, captcha, Duration.ofMinutes(expirationInMinutes));
|
||||||
RedisUtils.setCacheObject(limitCaptchaKey, captcha, Duration.ofSeconds(captchaMail.getLimitInSeconds()));
|
RedisUtils.setCacheObject(limitCaptchaKey, captcha, Duration.ofSeconds(captchaMail.getLimitInSeconds()));
|
||||||
return R.ok(String.format("发送成功,验证码有效期 %s 分钟", expirationInMinutes));
|
return R.ok(String.format("发送成功,验证码有效期 %s 分钟", expirationInMinutes));
|
||||||
|
@ -38,7 +38,7 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.consts.CacheConstants;
|
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||||
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
||||||
import top.charles7c.cnadmin.common.model.query.PageQuery;
|
import top.charles7c.cnadmin.common.model.query.PageQuery;
|
||||||
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
|
import top.charles7c.cnadmin.common.model.vo.PageDataVO;
|
||||||
@ -74,7 +74,7 @@ public class OnlineUserController {
|
|||||||
|
|
||||||
// 获取 Token Session
|
// 获取 Token Session
|
||||||
SaSession saSession = StpUtil.getTokenSessionByToken(token);
|
SaSession saSession = StpUtil.getTokenSessionByToken(token);
|
||||||
LoginUser loginUser = saSession.get(CacheConstants.LOGIN_USER_CACHE_KEY, new LoginUser());
|
LoginUser loginUser = saSession.get(CacheConsts.LOGIN_USER_CACHE_KEY, new LoginUser());
|
||||||
|
|
||||||
// 检查是否符合查询条件
|
// 检查是否符合查询条件
|
||||||
if (Boolean.TRUE.equals(checkQuery(query, loginUser))) {
|
if (Boolean.TRUE.equals(checkQuery(query, loginUser))) {
|
||||||
|
@ -30,8 +30,8 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.util.ReUtil;
|
import cn.hutool.core.util.ReUtil;
|
||||||
|
|
||||||
import top.charles7c.cnadmin.common.consts.CacheConstants;
|
import top.charles7c.cnadmin.common.constant.CacheConsts;
|
||||||
import top.charles7c.cnadmin.common.consts.RegExpConstants;
|
import top.charles7c.cnadmin.common.constant.RegExpConsts;
|
||||||
import top.charles7c.cnadmin.common.model.vo.R;
|
import top.charles7c.cnadmin.common.model.vo.R;
|
||||||
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
import top.charles7c.cnadmin.common.util.ExceptionUtils;
|
||||||
import top.charles7c.cnadmin.common.util.RedisUtils;
|
import top.charles7c.cnadmin.common.util.RedisUtils;
|
||||||
@ -89,7 +89,7 @@ public class UserCenterController {
|
|||||||
String rawNewPassword =
|
String rawNewPassword =
|
||||||
ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updatePasswordRequest.getNewPassword()));
|
ExceptionUtils.exToNull(() -> SecureUtils.decryptByRsaPrivateKey(updatePasswordRequest.getNewPassword()));
|
||||||
ValidationUtils.throwIfBlank(rawNewPassword, "新密码解密失败");
|
ValidationUtils.throwIfBlank(rawNewPassword, "新密码解密失败");
|
||||||
ValidationUtils.throwIf(() -> !ReUtil.isMatch(RegExpConstants.PASSWORD, rawNewPassword),
|
ValidationUtils.throwIf(() -> !ReUtil.isMatch(RegExpConsts.PASSWORD, rawNewPassword),
|
||||||
"密码长度 6 到 32 位,同时包含数字和字母");
|
"密码长度 6 到 32 位,同时包含数字和字母");
|
||||||
|
|
||||||
// 修改密码
|
// 修改密码
|
||||||
@ -105,7 +105,7 @@ public class UserCenterController {
|
|||||||
ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败");
|
ValidationUtils.throwIfBlank(rawCurrentPassword, "当前密码解密失败");
|
||||||
|
|
||||||
// 校验验证码
|
// 校验验证码
|
||||||
String captchaKey = RedisUtils.formatKey(CacheConstants.CAPTCHA_CACHE_KEY, updateEmailRequest.getNewEmail());
|
String captchaKey = RedisUtils.formatKey(CacheConsts.CAPTCHA_CACHE_KEY, updateEmailRequest.getNewEmail());
|
||||||
String captcha = RedisUtils.getCacheObject(captchaKey);
|
String captcha = RedisUtils.getCacheObject(captchaKey);
|
||||||
ValidationUtils.throwIfBlank(captcha, "验证码已失效");
|
ValidationUtils.throwIfBlank(captcha, "验证码已失效");
|
||||||
ValidationUtils.throwIfNotEqualIgnoreCase(updateEmailRequest.getCaptcha(), captcha, "验证码错误");
|
ValidationUtils.throwIfNotEqualIgnoreCase(updateEmailRequest.getCaptcha(), captcha, "验证码错误");
|
||||||
|
@ -30,7 +30,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
|||||||
import top.charles7c.cnadmin.common.annotation.CrudRequestMapping;
|
import top.charles7c.cnadmin.common.annotation.CrudRequestMapping;
|
||||||
import top.charles7c.cnadmin.common.base.BaseController;
|
import top.charles7c.cnadmin.common.base.BaseController;
|
||||||
import top.charles7c.cnadmin.common.base.BaseRequest;
|
import top.charles7c.cnadmin.common.base.BaseRequest;
|
||||||
import top.charles7c.cnadmin.common.consts.Constants;
|
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||||
import top.charles7c.cnadmin.common.model.vo.R;
|
import top.charles7c.cnadmin.common.model.vo.R;
|
||||||
import top.charles7c.cnadmin.system.model.query.UserQuery;
|
import top.charles7c.cnadmin.system.model.query.UserQuery;
|
||||||
import top.charles7c.cnadmin.system.model.request.UpdateUserRoleRequest;
|
import top.charles7c.cnadmin.system.model.request.UpdateUserRoleRequest;
|
||||||
@ -55,7 +55,7 @@ public class UserController extends BaseController<UserService, UserVO, UserDeta
|
|||||||
@SaCheckPermission("system:user:add")
|
@SaCheckPermission("system:user:add")
|
||||||
protected R<Long> add(@Validated(BaseRequest.Add.class) @RequestBody UserRequest request) {
|
protected R<Long> add(@Validated(BaseRequest.Add.class) @RequestBody UserRequest request) {
|
||||||
Long id = baseService.add(request);
|
Long id = baseService.add(request);
|
||||||
return R.ok(String.format("新增成功,请牢记默认密码:%s", Constants.DEFAULT_PASSWORD), id);
|
return R.ok(String.format("新增成功,请牢记默认密码:%s", SysConsts.DEFAULT_PASSWORD), id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "重置密码", description = "重置用户登录密码为默认密码")
|
@Operation(summary = "重置密码", description = "重置用户登录密码为默认密码")
|
||||||
@ -63,7 +63,7 @@ public class UserController extends BaseController<UserService, UserVO, UserDeta
|
|||||||
@PatchMapping("/{userId}/password")
|
@PatchMapping("/{userId}/password")
|
||||||
public R resetPassword(@PathVariable Long userId) {
|
public R resetPassword(@PathVariable Long userId) {
|
||||||
baseService.resetPassword(userId);
|
baseService.resetPassword(userId);
|
||||||
return R.ok(String.format("重置密码成功,请牢记默认密码:%s", Constants.DEFAULT_PASSWORD));
|
return R.ok(String.format("重置密码成功,请牢记默认密码:%s", SysConsts.DEFAULT_PASSWORD));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "分配角色", description = "为用户新增或移除角色")
|
@Operation(summary = "分配角色", description = "为用户新增或移除角色")
|
||||||
|
Loading…
Reference in New Issue
Block a user