fix: 登出时使用的token参数未过滤Bearer,导致登出并未清除redis记录
This commit is contained in:
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.youlai.boot.common.constant.RedisConstants;
|
import com.youlai.boot.common.constant.RedisConstants;
|
||||||
|
import com.youlai.boot.common.constant.SecurityConstants;
|
||||||
import com.youlai.boot.core.exception.BusinessException;
|
import com.youlai.boot.core.exception.BusinessException;
|
||||||
import com.youlai.boot.core.web.ResultCode;
|
import com.youlai.boot.core.web.ResultCode;
|
||||||
import com.youlai.boot.config.property.SecurityProperties;
|
import com.youlai.boot.config.property.SecurityProperties;
|
||||||
@@ -173,7 +174,8 @@ public class RedisTokenManager implements TokenManager {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void invalidateToken(String token) {
|
public void invalidateToken(String token) {
|
||||||
Object value = redisTemplate.opsForValue().get(formatTokenKey(token));
|
String cleanToken = cleanBearerPrefix(token);
|
||||||
|
Object value = redisTemplate.opsForValue().get(formatTokenKey(cleanToken));
|
||||||
if (value instanceof UserSession userSession) {
|
if (value instanceof UserSession userSession) {
|
||||||
Long userId = userSession.getUserId();
|
Long userId = userSession.getUserId();
|
||||||
invalidateUserSessions(userId);
|
invalidateUserSessions(userId);
|
||||||
@@ -318,4 +320,15 @@ public class RedisTokenManager implements TokenManager {
|
|||||||
redisTemplate.opsForValue().set(key, value); // ttl=-1时永不过期
|
redisTemplate.opsForValue().set(key, value); // ttl=-1时永不过期
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清理 Bearer 前缀
|
||||||
|
*/
|
||||||
|
private String cleanBearerPrefix(String token) {
|
||||||
|
if (token.startsWith(SecurityConstants.BEARER_TOKEN_PREFIX)) {
|
||||||
|
return token.substring(SecurityConstants.BEARER_TOKEN_PREFIX.length()).trim();
|
||||||
|
}
|
||||||
|
return token.trim();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user