|
@@ -21,6 +21,9 @@ import java.util.Map;
|
|
|
* <li>有效期默认 7 天(对齐原 PHP 端 {@code Cache::set($token, $value, 86400 * 7)})</li>
|
|
* <li>有效期默认 7 天(对齐原 PHP 端 {@code Cache::set($token, $value, 86400 * 7)})</li>
|
|
|
* </ul>
|
|
* </ul>
|
|
|
*
|
|
*
|
|
|
|
|
+ * <p>读写走 {@link RedisUtils} 的 string 专用方法(底层 {@code StringRedisTemplate}),
|
|
|
|
|
+ * 落库就是纯 JSON 文本,不会被 Jackson 再编码成带引号的字符串,便于 redis-cli 直接查看。
|
|
|
|
|
+ *
|
|
|
* <p>字段名沿用 PHP 的 snake_case({@code store_id} / {@code is_login}),
|
|
* <p>字段名沿用 PHP 的 snake_case({@code store_id} / {@code is_login}),
|
|
|
* 这样 {@link LoginInfo#fromCacheValue(Map)} 可直接复用,无需再写一套解析。
|
|
* 这样 {@link LoginInfo#fromCacheValue(Map)} 可直接复用,无需再写一套解析。
|
|
|
*/
|
|
*/
|
|
@@ -54,12 +57,11 @@ public class RedisTokenStore {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
- // RedisUtils.get 返回 Object,键不存在时为 null,必须先判空再 toString
|
|
|
|
|
- Object cached = redis.get(key(token));
|
|
|
|
|
- if (cached == null) {
|
|
|
|
|
|
|
+ // 用 string 专用读取,避免 Jackson 序列化把 JSON 文本再包一层引号
|
|
|
|
|
+ String json = redis.getString(key(token));
|
|
|
|
|
+ if (json == null) {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
- String json = cached.toString();
|
|
|
|
|
Map<String, Object> value = objectMapper.readValue(
|
|
Map<String, Object> value = objectMapper.readValue(
|
|
|
json, new TypeReference<LinkedHashMap<String, Object>>() {
|
|
json, new TypeReference<LinkedHashMap<String, Object>>() {
|
|
|
});
|
|
});
|
|
@@ -92,9 +94,9 @@ public class RedisTokenStore {
|
|
|
throw new IllegalStateException("登录态序列化失败: " + e.getMessage(), e);
|
|
throw new IllegalStateException("登录态序列化失败: " + e.getMessage(), e);
|
|
|
}
|
|
}
|
|
|
if (ttlSeconds > 0) {
|
|
if (ttlSeconds > 0) {
|
|
|
- redis.set(key(token), json, ttlSeconds);
|
|
|
|
|
|
|
+ redis.setString(key(token), json, ttlSeconds);
|
|
|
} else {
|
|
} else {
|
|
|
- redis.set(key(token), json);
|
|
|
|
|
|
|
+ redis.setString(key(token), json);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -104,7 +106,7 @@ public class RedisTokenStore {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
try {
|
|
try {
|
|
|
- redis.delete(key(token));
|
|
|
|
|
|
|
+ redis.deleteString(key(token));
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.warn("清除登录态失败 token={} : {}", token, e.getMessage());
|
|
log.warn("清除登录态失败 token={} : {}", token, e.getMessage());
|
|
|
}
|
|
}
|