bucket = CLIENT.getBucket(key);
+ return bucket.setIfExists(value, duration);
+ }
+
/**
* 注册对象监听器
*
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java
index aef8a66ae..ce8d85c0b 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java
@@ -10,7 +10,6 @@ import org.dromara.common.satoken.core.service.SaPermissionImpl;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* sa-token 配置
@@ -19,7 +18,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
*/
@AutoConfiguration
@PropertySource(value = "classpath:common-satoken.yml", factory = YmlPropertySourceFactory.class)
-public class SaTokenConfig implements WebMvcConfigurer {
+public class SaTokenConfig {
@Bean
public StpLogic getStpLogicJwt() {
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java
index 8d2aac965..d88596228 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/core/dao/PlusSaTokenDao.java
@@ -45,12 +45,9 @@ public class PlusSaTokenDao implements SaTokenDao {
*/
@Override
public void update(String key, String value) {
- long expire = getTimeout(key);
- // -2 = 无此键
- if (expire == NOT_VALUE_EXPIRE) {
- return;
+ if (RedisUtils.hasKey(key)) {
+ RedisUtils.setCacheObject(key, value, true);
}
- this.set(key, value, expire);
}
/**
@@ -75,17 +72,6 @@ public class PlusSaTokenDao implements SaTokenDao {
*/
@Override
public void updateTimeout(String key, long timeout) {
- // 判断是否想要设置为永久
- if (timeout == NEVER_EXPIRE) {
- long expire = getTimeout(key);
- if (expire == NEVER_EXPIRE) {
- // 如果其已经被设置为永久,则不作任何处理
- } else {
- // 如果尚未被设置为永久,那么再次set一次
- this.set(key, this.get(key), timeout);
- }
- return;
- }
RedisUtils.expire(key, Duration.ofSeconds(timeout));
}
@@ -119,12 +105,9 @@ public class PlusSaTokenDao implements SaTokenDao {
*/
@Override
public void updateObject(String key, Object object) {
- long expire = getObjectTimeout(key);
- // -2 = 无此键
- if (expire == NOT_VALUE_EXPIRE) {
- return;
+ if (RedisUtils.hasKey(key)) {
+ RedisUtils.setCacheObject(key, object, true);
}
- this.setObject(key, object, expire);
}
/**
@@ -149,17 +132,6 @@ public class PlusSaTokenDao implements SaTokenDao {
*/
@Override
public void updateObjectTimeout(String key, long timeout) {
- // 判断是否想要设置为永久
- if (timeout == NEVER_EXPIRE) {
- long expire = getObjectTimeout(key);
- if (expire == NEVER_EXPIRE) {
- // 如果其已经被设置为永久,则不作任何处理
- } else {
- // 如果尚未被设置为永久,那么再次set一次
- this.setObject(key, this.getObject(key), timeout);
- }
- return;
- }
RedisUtils.expire(key, Duration.ofSeconds(timeout));
}
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
index 97b7041a2..2406ba904 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
@@ -15,6 +15,7 @@ import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.UserType;
import java.util.Set;
+import java.util.function.Supplier;
/**
* 登录鉴权助手
@@ -36,6 +37,7 @@ public class LoginHelper {
public static final String USER_KEY = "userId";
public static final String DEPT_KEY = "deptId";
public static final String CLIENT_KEY = "clientid";
+ public static final String TENANT_ADMIN_KEY = "isTenantAdmin";
/**
* 登录系统 基于 设备类型
@@ -55,32 +57,27 @@ public class LoginHelper {
model.setExtra(TENANT_KEY, loginUser.getTenantId())
.setExtra(USER_KEY, loginUser.getUserId())
.setExtra(DEPT_KEY, loginUser.getDeptId()));
- StpUtil.getSession().set(LOGIN_USER_KEY, loginUser);
+ StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
}
/**
* 获取用户(多级缓存)
*/
public static LoginUser getLoginUser() {
- LoginUser loginUser = (LoginUser) SaHolder.getStorage().get(LOGIN_USER_KEY);
- if (loginUser != null) {
- return loginUser;
- }
- SaSession session = StpUtil.getSession();
- if (ObjectUtil.isNull(session)) {
- return null;
- }
- loginUser = (LoginUser) session.get(LOGIN_USER_KEY);
- SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
- return loginUser;
+ return (LoginUser) getStorageIfAbsentSet(LOGIN_USER_KEY, () -> {
+ SaSession session = StpUtil.getTokenSession();
+ if (ObjectUtil.isNull(session)) {
+ return null;
+ }
+ return session.get(LOGIN_USER_KEY);
+ });
}
/**
* 获取用户基于token
*/
public static LoginUser getLoginUser(String token) {
- Object loginId = StpUtil.getLoginIdByToken(token);
- SaSession session = StpUtil.getSessionByLoginId(loginId);
+ SaSession session = StpUtil.getTokenSessionByToken(token);
if (ObjectUtil.isNull(session)) {
return null;
}
@@ -109,17 +106,7 @@ public class LoginHelper {
}
private static Object getExtra(String key) {
- Object obj;
- try {
- obj = SaHolder.getStorage().get(key);
- if (ObjectUtil.isNull(obj)) {
- obj = StpUtil.getExtra(key);
- SaHolder.getStorage().set(key, obj);
- }
- } catch (Exception e) {
- return null;
- }
- return obj;
+ return getStorageIfAbsentSet(key, () -> StpUtil.getExtra(key));
}
/**
@@ -162,7 +149,26 @@ public class LoginHelper {
}
public static boolean isTenantAdmin() {
- return isTenantAdmin(getLoginUser().getRolePermission());
+ Object value = getStorageIfAbsentSet(TENANT_ADMIN_KEY, () -> {
+ return isTenantAdmin(getLoginUser().getRolePermission());
+ });
+ return Convert.toBool(value);
}
+ public static boolean isLogin() {
+ return getLoginUser() != null;
+ }
+
+ public static Object getStorageIfAbsentSet(String key, Supplier