java如何缓存token
缓存Token的常见方法
在Java中缓存Token可以通过多种方式实现,具体选择取决于应用场景和需求。以下是几种常见的方法:
使用内存缓存(如ConcurrentHashMap)
适用于单机应用或短期缓存需求。利用ConcurrentHashMap实现线程安全的Token存储:
private static final ConcurrentHashMap<String, String> tokenCache = new ConcurrentHashMap<>();
public void cacheToken(String key, String token, long expireTime) {
tokenCache.put(key, token);
// 可添加过期时间处理逻辑
}
public String getToken(String key) {
return tokenCache.get(key);
}
使用Guava Cache
Google Guava库提供了更强大的缓存功能,支持过期策略和缓存回收:
Cache<String, String> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(30, TimeUnit.MINUTES)
.build();
public void cacheToken(String key, String token) {
cache.put(key, token);
}
public String getToken(String key) {
return cache.getIfPresent(key);
}
使用Redis缓存
分布式场景下推荐使用Redis作为缓存中间件,通过Jedis或Lettuce客户端操作:
Jedis jedis = new Jedis("localhost");
public void cacheToken(String key, String token, int expireSeconds) {
jedis.setex(key, expireSeconds, token);
}
public String getToken(String key) {
return jedis.get(key);
}
使用Spring Cache抽象
Spring框架提供了缓存抽象层,可轻松集成多种缓存实现:
@Cacheable(value = "tokens", key = "#key")
public String getToken(String key) {
// 从数据库或其他来源获取Token
}
@CachePut(value = "tokens", key = "#key")
public String cacheToken(String key, String token) {
return token;
}
实现Token自动刷新
对于需要自动刷新的Token,可以结合定时任务和缓存策略:

@Scheduled(fixedRate = 3600000) // 每小时刷新一次
public void refreshTokens() {
tokenCache.forEach((key, oldToken) -> {
String newToken = fetchNewToken(key);
cacheToken(key, newToken);
});
}
安全注意事项
- 敏感信息加密:存储前对Token进行加密处理
- 传输安全:使用HTTPS协议传输Token
- 最小权限:缓存系统应设置严格的访问控制
- 日志脱敏:避免在日志中输出完整Token
以上方法可根据实际需求组合使用,例如内存缓存+Redis多级缓存架构,既保证速度又满足分布式需求。






