redis反序列化问题
This commit is contained in:
@@ -78,7 +78,7 @@ public class HttpLoginArgumentResolver implements HandlerMethodArgumentResolver
|
||||
// 从Redis中获取LoginDomain
|
||||
String userId = tokenParser.getUserIdFromToken(token);
|
||||
String redisKey = REDIS_LOGIN_PREFIX + userId;
|
||||
LoginDomain loginDomain = (LoginDomain) redisService.get(redisKey);
|
||||
LoginDomain loginDomain = redisService.get(redisKey, LoginDomain.class);
|
||||
|
||||
if (loginDomain == null) {
|
||||
if (httpLogin.required()) {
|
||||
|
||||
@@ -22,7 +22,6 @@ import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.xyzh.common.core.domain.LoginDomain;
|
||||
@@ -107,18 +106,8 @@ public class GatewayAuthConfig {
|
||||
if (StringUtils.hasText(authHeader) && authHeader.startsWith(BEARER_PREFIX)) {
|
||||
String token = authHeader.substring(BEARER_PREFIX.length());
|
||||
String cacheKey = LOGIN_TOKEN_PREFIX + token;
|
||||
Object obj = redisService.get(cacheKey);
|
||||
|
||||
logger.info("Redis key: {}, obj type: {}", cacheKey, obj != null ? obj.getClass().getName() : "null");
|
||||
|
||||
LoginDomain login = null;
|
||||
if (obj instanceof LoginDomain) {
|
||||
login = (LoginDomain) obj;
|
||||
} else if (obj instanceof String) {
|
||||
// Redis 返回的是 JSON 字符串,需要反序列化
|
||||
login = JSON.parseObject((String) obj, LoginDomain.class);
|
||||
logger.info("从 JSON 反序列化 LoginDomain");
|
||||
}
|
||||
LoginDomain login = redisService.get(cacheKey, LoginDomain.class);
|
||||
logger.info("Redis key: {}, login: {}", cacheKey, login != null ? "loaded" : "null");
|
||||
|
||||
if (login != null) {
|
||||
if (login.getUserPermissions() != null) {
|
||||
|
||||
@@ -8,8 +8,6 @@ import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
import org.xyzh.common.core.domain.LoginDomain;
|
||||
import org.xyzh.common.redis.service.RedisService;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
||||
@@ -48,13 +46,7 @@ public class LoginUtil {
|
||||
|
||||
try {
|
||||
String cacheKey = LOGIN_TOKEN_PREFIX + token;
|
||||
Object obj = instance.redisService.get(cacheKey);
|
||||
if (obj instanceof LoginDomain) {
|
||||
return (LoginDomain) obj;
|
||||
} else if (obj instanceof String) {
|
||||
// Redis 返回的是 JSON 字符串,需要反序列化
|
||||
return JSON.parseObject((String) obj, LoginDomain.class);
|
||||
}
|
||||
return instance.redisService.get(cacheKey, LoginDomain.class);
|
||||
} catch (Exception e) {
|
||||
// 忽略异常
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
|
||||
/**
|
||||
* @description RedisService.java Redis工具服务类,封装常用Redis操作
|
||||
* @filename RedisService.java
|
||||
@@ -56,6 +58,28 @@ public class RedisService {
|
||||
return redisTemplate.opsForValue().get(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 获取key对应的value并反序列化为指定类型
|
||||
* @param key String 键
|
||||
* @param clazz Class<T> 目标类型
|
||||
* @return T 反序列化后的对象
|
||||
* @author yslg
|
||||
* @since 2025-12-19
|
||||
*/
|
||||
public <T> T get(String key, Class<T> clazz) {
|
||||
Object obj = redisTemplate.opsForValue().get(key);
|
||||
if (obj == null) {
|
||||
return null;
|
||||
}
|
||||
if (clazz.isInstance(obj)) {
|
||||
return clazz.cast(obj);
|
||||
}
|
||||
if (obj instanceof String) {
|
||||
return JSON.parseObject((String) obj, clazz);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 删除key
|
||||
* @param key String 键
|
||||
|
||||
Reference in New Issue
Block a user