update 优化 将 CacheConstants 合并到 CacheNames

This commit is contained in:
疯狂的狮子Li
2026-03-18 14:28:01 +08:00
parent 7bc2315c64
commit b67cd76e04
8 changed files with 30 additions and 56 deletions

View File

@@ -6,7 +6,7 @@ import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil; import cn.hutool.http.useragent.UserAgentUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.dto.UserOnlineDTO; import org.dromara.common.core.domain.dto.UserOnlineDTO;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
@@ -53,9 +53,9 @@ public class UserActionListener implements SaTokenListener {
dto.setDeviceType(loginParameter.getDeviceType()); dto.setDeviceType(loginParameter.getDeviceType());
dto.setDeptName((String) loginParameter.getExtra(LoginHelper.DEPT_NAME_KEY)); dto.setDeptName((String) loginParameter.getExtra(LoginHelper.DEPT_NAME_KEY));
if (loginParameter.getTimeout() == -1) { if (loginParameter.getTimeout() == -1) {
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto); RedisUtils.setCacheObject(CacheNames.ONLINE_TOKEN_KEY + tokenValue, dto);
} else { } else {
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(loginParameter.getTimeout())); RedisUtils.setCacheObject(CacheNames.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(loginParameter.getTimeout()));
} }
// 记录登录日志 // 记录登录日志
@@ -75,7 +75,7 @@ public class UserActionListener implements SaTokenListener {
*/ */
@Override @Override
public void doLogout(String loginType, Object loginId, String tokenValue) { public void doLogout(String loginType, Object loginId, String tokenValue) {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); RedisUtils.deleteObject(CacheNames.ONLINE_TOKEN_KEY + tokenValue);
log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue); log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue);
} }
@@ -84,7 +84,7 @@ public class UserActionListener implements SaTokenListener {
*/ */
@Override @Override
public void doKickout(String loginType, Object loginId, String tokenValue) { public void doKickout(String loginType, Object loginId, String tokenValue) {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); RedisUtils.deleteObject(CacheNames.ONLINE_TOKEN_KEY + tokenValue);
log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue); log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue);
} }
@@ -93,7 +93,7 @@ public class UserActionListener implements SaTokenListener {
*/ */
@Override @Override
public void doReplaced(String loginType, Object loginId, String tokenValue) { public void doReplaced(String loginType, Object loginId, String tokenValue) {
RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue); RedisUtils.deleteObject(CacheNames.ONLINE_TOKEN_KEY + tokenValue);
log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue); log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue);
} }

View File

@@ -10,7 +10,7 @@ import com.baomidou.lock.annotation.Lock4j;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthUser; import me.zhyd.oauth.model.AuthUser;
import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.dto.PostDTO; import org.dromara.common.core.domain.dto.PostDTO;
import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.RoleDTO;
@@ -33,8 +33,6 @@ import org.springframework.stereotype.Service;
import java.time.Duration; import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Supplier; import java.util.function.Supplier;
/** /**
@@ -193,7 +191,7 @@ public class SysLoginService {
* @param supplier 返回 {@code true} 表示本次认证失败 * @param supplier 返回 {@code true} 表示本次认证失败
*/ */
public void checkLogin(LoginType loginType, String username, Supplier<Boolean> supplier) { public void checkLogin(LoginType loginType, String username, Supplier<Boolean> supplier) {
String errorKey = CacheConstants.PWD_ERR_CNT_KEY + username; String errorKey = CacheNames.PWD_ERR_CNT_KEY + username;
String loginFail = Constants.LOGIN_FAIL; String loginFail = Constants.LOGIN_FAIL;
// 获取用户登录错误次数默认为0 (可自定义限制策略 例如: key + username + ip) // 获取用户登录错误次数默认为0 (可自定义限制策略 例如: key + username + ip)

View File

@@ -1,30 +0,0 @@
package org.dromara.common.core.constant;
/**
* Redis 缓存键前缀常量。
*
* @author Lion Li
*/
public interface CacheConstants {
/**
* 在线用户 redis key
*/
String ONLINE_TOKEN_KEY = "online_tokens:";
/**
* 参数管理 cache key
*/
String SYS_CONFIG_KEY = "sys_config:";
/**
* 字典管理 cache key
*/
String SYS_DICT_KEY = "sys_dict:";
/**
* 登录账户密码错误次数 redis key
*/
String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
}

View File

@@ -39,7 +39,7 @@ public interface CacheNames {
/** /**
* 客户端 * 客户端
*/ */
String SYS_CLIENT = GlobalConstants.GLOBAL_REDIS_KEY + "sys_client#30d"; String SYS_CLIENT = "sys_client#30d";
/** /**
* 用户账户 * 用户账户
@@ -74,11 +74,16 @@ public interface CacheNames {
/** /**
* OSS配置 * OSS配置
*/ */
String SYS_OSS_CONFIG = GlobalConstants.GLOBAL_REDIS_KEY + "sys_oss_config"; String SYS_OSS_CONFIG = "sys_oss_config";
/** /**
* 在线用户 * 在线用户
*/ */
String ONLINE_TOKEN = "online_tokens"; String ONLINE_TOKEN_KEY = "online_tokens:";
/**
* 登录账户密码错误次数 redis key
*/
String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
} }

View File

@@ -12,6 +12,7 @@ import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Before;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
@@ -79,7 +80,7 @@ public class RepeatSubmitAspect {
if (jsonResult instanceof R<?> r) { if (jsonResult instanceof R<?> r) {
try { try {
// 成功则不删除redis数据 保证在有效时间内无法重复提交 // 成功则不删除redis数据 保证在有效时间内无法重复提交
if (r.getCode() == R.SUCCESS) { if (r.getCode() == HttpStatus.SUCCESS) {
return; return;
} }
RedisUtils.deleteObject(KEY_CACHE.get()); RedisUtils.deleteObject(KEY_CACHE.get());

View File

@@ -4,14 +4,14 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.lock.annotation.Lock4j; import com.baomidou.lock.annotation.Lock4j;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.PageResult; import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysLoginInfoBo; import org.dromara.system.domain.bo.SysLoginInfoBo;
@@ -100,7 +100,7 @@ public class SysLoginInfoController extends BaseController {
@RepeatSubmit() @RepeatSubmit()
@GetMapping("/unlock/{userName}") @GetMapping("/unlock/{userName}")
public R<Void> unlock(@PathVariable("userName") String userName) { public R<Void> unlock(@PathVariable("userName") String userName) {
String loginName = CacheConstants.PWD_ERR_CNT_KEY + userName; String loginName = CacheNames.PWD_ERR_CNT_KEY + userName;
if (RedisUtils.hasKey(loginName)) { if (RedisUtils.hasKey(loginName)) {
RedisUtils.deleteObject(loginName); RedisUtils.deleteObject(loginName);
} }

View File

@@ -5,15 +5,15 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.dto.UserOnlineDTO; import org.dromara.common.core.domain.dto.UserOnlineDTO;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.core.domain.PageResult; import org.dromara.common.redis.annotation.RepeatSubmit;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.SysUserOnline; import org.dromara.system.domain.SysUserOnline;
@@ -46,7 +46,7 @@ public class SysUserOnlineController extends BaseController {
@GetMapping("/list") @GetMapping("/list")
public R<PageResult<SysUserOnline>> list(String ipaddr, String userName) { public R<PageResult<SysUserOnline>> list(String ipaddr, String userName) {
// 获取所有未过期的 token // 获取所有未过期的 token
Collection<String> keys = RedisUtils.keys(CacheConstants.ONLINE_TOKEN_KEY + "*"); Collection<String> keys = RedisUtils.keys(CacheNames.ONLINE_TOKEN_KEY + "*");
List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>(); List<UserOnlineDTO> userOnlineDTOList = new ArrayList<>();
for (String key : keys) { for (String key : keys) {
String token = StringUtils.substringAfterLast(key, ":"); String token = StringUtils.substringAfterLast(key, ":");
@@ -54,7 +54,7 @@ public class SysUserOnlineController extends BaseController {
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) { if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
continue; continue;
} }
userOnlineDTOList.add(RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)); userOnlineDTOList.add(RedisUtils.getCacheObject(CacheNames.ONLINE_TOKEN_KEY + token));
} }
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) {
userOnlineDTOList = StreamUtils.filter(userOnlineDTOList, userOnline -> userOnlineDTOList = StreamUtils.filter(userOnlineDTOList, userOnline ->
@@ -105,7 +105,7 @@ public class SysUserOnlineController extends BaseController {
List<String> tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString()); List<String> tokenIds = StpUtil.getTokenValueListByLoginId(StpUtil.getLoginIdAsString());
List<UserOnlineDTO> userOnlineDTOList = tokenIds.stream() List<UserOnlineDTO> userOnlineDTOList = tokenIds.stream()
.filter(token -> StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) >= -1) .filter(token -> StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) >= -1)
.map(token -> (UserOnlineDTO) RedisUtils.getCacheObject(CacheConstants.ONLINE_TOKEN_KEY + token)) .map(token -> (UserOnlineDTO) RedisUtils.getCacheObject(CacheNames.ONLINE_TOKEN_KEY + token))
.collect(Collectors.toList()); .collect(Collectors.toList());
//复制和处理 SysUserOnline 对象列表 //复制和处理 SysUserOnline 对象列表
Collections.reverse(userOnlineDTOList); Collections.reverse(userOnlineDTOList);

View File

@@ -8,7 +8,7 @@ import cn.hutool.crypto.digest.BCrypt;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheConstants; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.PageResult; import org.dromara.common.core.domain.PageResult;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
@@ -287,7 +287,7 @@ public class SysUserController extends BaseController {
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
return R.fail("用户不存在"); return R.fail("用户不存在");
} }
String loginName = CacheConstants.PWD_ERR_CNT_KEY + user.getUserName(); String loginName = CacheNames.PWD_ERR_CNT_KEY + user.getUserName();
if (RedisUtils.hasKey(loginName)) { if (RedisUtils.hasKey(loginName)) {
RedisUtils.deleteObject(loginName); RedisUtils.deleteObject(loginName);
} }