All Downloads are FREE. Search and download functionalities are using the official Maven repository.

studio.wetrack.web.auth.service.impl.TokenRedisStorageService Maven / Gradle / Ivy

package studio.wetrack.web.auth.service.impl;

import studio.wetrack.web.auth.domain.Token;
import studio.wetrack.web.auth.service.TokenStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Collection;

/**
 * Created by zhanghong on 15/11/21.
 * redis中存储token
 */

public class TokenRedisStorageService implements TokenStorageService {


    /**
     * 所有的用户token都存在一个hash里,用来快速获取
     */
    static final String TOKEN_HASH_KEY = "TOKEN_HASH";
    /**
     * 另外,单独为每个用户都保存一个,方便取特定用户的所有的token,因为redis不支持hash表内查询
     * 相当于每个token有一份冗余数据
     */
    static final String USER_TOKEN_HASH_KEY_PREFIX = "USER_TOKEN_HASH_";

    RedisTemplate redisTemplate;
    BoundHashOperations tokenHashOps;

    @Autowired
    public TokenRedisStorageService(RedisTemplate redisTemplate){
        this.redisTemplate = redisTemplate;
        tokenHashOps = redisTemplate.boundHashOps(TOKEN_HASH_KEY);
    }

    @Override
    public boolean addToken(Token token) {
        tokenHashOps.put(token.getToken(), token);
        BoundHashOperations userHashOps = redisTemplate.boundHashOps(USER_TOKEN_HASH_KEY_PREFIX + token.getUser().getId());
        userHashOps.put(token.getToken(), token);
        return true;
    }

    @Override
    public Token removeByTokenString(String tokenString) {
        Token token = tokenHashOps.get(tokenString);
        tokenHashOps.delete(tokenString);
        BoundHashOperations userHashOps = redisTemplate.boundHashOps(USER_TOKEN_HASH_KEY_PREFIX + token.getUser().getId());
        userHashOps.delete(tokenString);
        return token;
    }

    @Override
    public Token findByTokenString(String tokenString) {
        return tokenHashOps.get(tokenString);
    }

    @Override
    public Collection findAllByUserId(String userId) {
        BoundHashOperations userHashOps = redisTemplate.boundHashOps(USER_TOKEN_HASH_KEY_PREFIX + userId);
        return userHashOps.values();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy