处理多端登录问题
This commit is contained in:
parent
b550755d32
commit
e1b6eaf2ba
|
|
@ -14,6 +14,9 @@ public class AdminConfig {
|
||||||
// 令牌缓存键
|
// 令牌缓存键
|
||||||
public static final String backstageTokenKey = "backstage:token:";
|
public static final String backstageTokenKey = "backstage:token:";
|
||||||
|
|
||||||
|
// 令牌的集合
|
||||||
|
public static final String backstageTokenSet = "backstage:token:set:";
|
||||||
|
|
||||||
// 免登录验证
|
// 免登录验证
|
||||||
public static String[] notLoginUri = new String[]{
|
public static String[] notLoginUri = new String[]{
|
||||||
"system:login", // 登录接口
|
"system:login", // 登录接口
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ class SystemAuthDeptServiceImpl implements ISystemAuthDeptService {
|
||||||
List<SystemAuthDept> systemAuthDeptList = systemAuthDeptMapper.selectList(new QueryWrapper<SystemAuthDept>()
|
List<SystemAuthDept> systemAuthDeptList = systemAuthDeptMapper.selectList(new QueryWrapper<SystemAuthDept>()
|
||||||
.gt("pid", 0)
|
.gt("pid", 0)
|
||||||
.eq("is_delete", 0)
|
.eq("is_delete", 0)
|
||||||
.orderByDesc((Arrays.asList("id", "sort"))));
|
.orderByDesc((Arrays.asList("sort", "id"))));
|
||||||
|
|
||||||
List<SystemAuthDeptVo> adminVoArrayList = new ArrayList<>();
|
List<SystemAuthDeptVo> adminVoArrayList = new ArrayList<>();
|
||||||
for (SystemAuthDept systemAuthDept : systemAuthDeptList) {
|
for (SystemAuthDept systemAuthDept : systemAuthDeptList) {
|
||||||
|
|
@ -73,7 +73,7 @@ class SystemAuthDeptServiceImpl implements ISystemAuthDeptService {
|
||||||
queryWrapper.orderByAsc(Arrays.asList("sort", "id"));
|
queryWrapper.orderByAsc(Arrays.asList("sort", "id"));
|
||||||
queryWrapper.select(SystemAuthDept.class, info ->
|
queryWrapper.select(SystemAuthDept.class, info ->
|
||||||
!info.getColumn().equals("is_delete") &&
|
!info.getColumn().equals("is_delete") &&
|
||||||
!info.getColumn().equals("delete_time"));
|
!info.getColumn().equals("delete_time"));
|
||||||
|
|
||||||
systemAuthDeptMapper.setSearch(queryWrapper, params, new String[]{
|
systemAuthDeptMapper.setSearch(queryWrapper, params, new String[]{
|
||||||
"like:name:str",
|
"like:name:str",
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,7 @@ import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统登录服务实现类
|
* 系统登录服务实现类
|
||||||
|
|
@ -76,8 +74,18 @@ public class SystemLoginServiceImpl implements ISystemLoginService {
|
||||||
sysAdmin.setLastLoginTime(System.currentTimeMillis() / 1000);
|
sysAdmin.setLastLoginTime(System.currentTimeMillis() / 1000);
|
||||||
systemAuthAdminMapper.updateById(sysAdmin);
|
systemAuthAdminMapper.updateById(sysAdmin);
|
||||||
|
|
||||||
// 缓存登录信息
|
// 非多处登录
|
||||||
String token = ToolsUtil.makeToken();
|
String token = ToolsUtil.makeToken();
|
||||||
|
if (sysAdmin.getIsMultipoint() == 0) {
|
||||||
|
Set<Object> 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);
|
RedisUtil.set(AdminConfig.backstageTokenKey+token, sysAdmin.getId(), 7200);
|
||||||
iSystemAuthAdminService.cacheAdminUserByUid(sysAdmin.getId());
|
iSystemAuthAdminService.cacheAdminUserByUid(sysAdmin.getId());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,16 @@
|
||||||
package com.mdd.common.utils;
|
package com.mdd.common.utils;
|
||||||
|
|
||||||
import com.mdd.common.config.GlobalConfig;
|
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.RedisTemplate;
|
||||||
|
import org.springframework.data.redis.core.ScanOptions;
|
||||||
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collection;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
|
@ -180,6 +181,34 @@ public class RedisUtil {
|
||||||
|
|
||||||
/* ***************** common end *************** */
|
/* ***************** common end *************** */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按匹配获取或有KEY
|
||||||
|
*
|
||||||
|
* @author fzr
|
||||||
|
* @param pattern 规则
|
||||||
|
* @return Set<String>
|
||||||
|
*/
|
||||||
|
public static Set<String> matchSet(String pattern) {
|
||||||
|
Set<String> keys = new LinkedHashSet<>();
|
||||||
|
RedisUtil.handler().execute((RedisConnection connection) -> {
|
||||||
|
try (Cursor<byte[]> 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的值
|
* 获取key的值
|
||||||
*
|
*
|
||||||
|
|
@ -341,7 +370,6 @@ public class RedisUtil {
|
||||||
* @param key 键
|
* @param key 键
|
||||||
* @param item 项
|
* @param item 项
|
||||||
* @param value 值
|
* @param value 值
|
||||||
* @return true 成功 false失败
|
|
||||||
*/
|
*/
|
||||||
public static void hSet(String key, String item, Object value) {
|
public static void hSet(String key, String item, Object value) {
|
||||||
key = redisPrefix + key;
|
key = redisPrefix + key;
|
||||||
|
|
@ -455,7 +483,7 @@ public class RedisUtil {
|
||||||
* @param values 值 可以是多个
|
* @param values 值 可以是多个
|
||||||
* @return 成功个数
|
* @return 成功个数
|
||||||
*/
|
*/
|
||||||
public Long sSet(String key, Object... values) {
|
public static Long sSet(String key, Object... values) {
|
||||||
key = redisPrefix + key;
|
key = redisPrefix + key;
|
||||||
return redisTemplate.opsForSet().add(key, values);
|
return redisTemplate.opsForSet().add(key, values);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue