diff --git a/server/like-admin/src/main/java/com/mdd/admin/config/AdminConfig.java b/server/like-admin/src/main/java/com/mdd/admin/config/AdminConfig.java index 794855a0..34676075 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/config/AdminConfig.java +++ b/server/like-admin/src/main/java/com/mdd/admin/config/AdminConfig.java @@ -14,6 +14,9 @@ public class AdminConfig { // 令牌缓存键 public static final String backstageTokenKey = "backstage:token:"; + // 令牌的集合 + public static final String backstageTokenSet = "backstage:token:set:"; + // 免登录验证 public static String[] notLoginUri = new String[]{ "system:login", // 登录接口 diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemAuthDeptServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemAuthDeptServiceImpl.java index 744b4338..69ea5232 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemAuthDeptServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemAuthDeptServiceImpl.java @@ -44,7 +44,7 @@ class SystemAuthDeptServiceImpl implements ISystemAuthDeptService { List systemAuthDeptList = systemAuthDeptMapper.selectList(new QueryWrapper() .gt("pid", 0) .eq("is_delete", 0) - .orderByDesc((Arrays.asList("id", "sort")))); + .orderByDesc((Arrays.asList("sort", "id")))); List adminVoArrayList = new ArrayList<>(); for (SystemAuthDept systemAuthDept : systemAuthDeptList) { @@ -73,7 +73,7 @@ class SystemAuthDeptServiceImpl implements ISystemAuthDeptService { queryWrapper.orderByAsc(Arrays.asList("sort", "id")); queryWrapper.select(SystemAuthDept.class, info -> !info.getColumn().equals("is_delete") && - !info.getColumn().equals("delete_time")); + !info.getColumn().equals("delete_time")); systemAuthDeptMapper.setSearch(queryWrapper, params, new String[]{ "like:name:str", diff --git a/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemLoginServiceImpl.java b/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemLoginServiceImpl.java index eb24fbf0..98db95e4 100644 --- a/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemLoginServiceImpl.java +++ b/server/like-admin/src/main/java/com/mdd/admin/service/system/impl/SystemLoginServiceImpl.java @@ -19,9 +19,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * 系统登录服务实现类 @@ -76,8 +74,18 @@ public class SystemLoginServiceImpl implements ISystemLoginService { sysAdmin.setLastLoginTime(System.currentTimeMillis() / 1000); systemAuthAdminMapper.updateById(sysAdmin); - // 缓存登录信息 + // 非多处登录 String token = ToolsUtil.makeToken(); + if (sysAdmin.getIsMultipoint() == 0) { + Set ts = RedisUtil.sGet(AdminConfig.backstageTokenSet + sysAdmin.getId()); + for (Object t: ts) { + RedisUtil.del(t.toString()); + } + RedisUtil.del(AdminConfig.backstageTokenSet + sysAdmin.getId()); + RedisUtil.sSet(AdminConfig.backstageTokenSet + sysAdmin.getId(), token); + } + + // 缓存登录信息 RedisUtil.set(AdminConfig.backstageTokenKey+token, sysAdmin.getId(), 7200); iSystemAuthAdminService.cacheAdminUserByUid(sysAdmin.getId()); diff --git a/server/like-common/src/main/java/com/mdd/common/utils/RedisUtil.java b/server/like-common/src/main/java/com/mdd/common/utils/RedisUtil.java index 2ff243cc..cdc642dc 100644 --- a/server/like-common/src/main/java/com/mdd/common/utils/RedisUtil.java +++ b/server/like-common/src/main/java/com/mdd/common/utils/RedisUtil.java @@ -1,15 +1,16 @@ package com.mdd.common.utils; import com.mdd.common.config.GlobalConfig; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.core.Cursor; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; @Component @@ -180,6 +181,34 @@ public class RedisUtil { /* ***************** common end *************** */ + /** + * 按匹配获取或有KEY + * + * @author fzr + * @param pattern 规则 + * @return Set + */ + public static Set matchSet(String pattern) { + Set keys = new LinkedHashSet<>(); + RedisUtil.handler().execute((RedisConnection connection) -> { + try (Cursor cursor = connection.scan( + ScanOptions.scanOptions() + .count(Long.MAX_VALUE) + .match(pattern) + .build() + )) { + cursor.forEachRemaining(item -> { + keys.add(RedisSerializer.string().deserialize(item)); + }); + return null; + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + + return keys; + } + /** * 获取key的值 * @@ -341,7 +370,6 @@ public class RedisUtil { * @param key 键 * @param item 项 * @param value 值 - * @return true 成功 false失败 */ public static void hSet(String key, String item, Object value) { key = redisPrefix + key; @@ -455,7 +483,7 @@ public class RedisUtil { * @param values 值 可以是多个 * @return 成功个数 */ - public Long sSet(String key, Object... values) { + public static Long sSet(String key, Object... values) { key = redisPrefix + key; return redisTemplate.opsForSet().add(key, values); }