海西山帘家居有限公司

sa token 指定redis前綴/自定義redis前綴

行業(yè)動態(tài) 公司新聞 案例分享 技術(shù)百科

sa token 指定redis前綴/自定義redis前綴

來源:奇站網(wǎng)絡(luò) 瀏覽量:50 發(fā)布日期: 2025-02-21

sa token接入redis后,默認的key為satoken,雖然可以通過指定db索引的方式來區(qū)別不同項目,但是無法根據(jù)項目來設(shè)置。


解決方法:

排除SaTokenDaoRedisJackson

spring.autoconfigure.exclude=cn.dev33.satoken.dao.SaTokenDaoRedisJackson

重寫SaTokenDaoRedisJackson

import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.dao.SaTokenDaoRedisJackson;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * sa-token相關(guān)數(shù)據(jù),使用統(tǒng)一前綴存儲進redis
 *  <h3>具體實現(xiàn)步驟:</h3>
 *  <ul>
 *      <li>
 *          第一步:排除{@link SaTokenDaoRedisJackson}自動裝配。如通過配置文件排除:
 *          {@code
 *           spring:
 *             autoconfigure:
 *               exclude:
 *                 - cn.dev33.satoken.dao.SaTokenDaoRedisJackson
 *          }
 *      </li>
 *      <li>
 *          第二步:重寫SaTokenDaoRedisJackson并注冊進spring,參考這里的{@link RedisPrefixSaTokenDaoRedisJackson}
 *      </li>
 *  </ul>
 *
 * @author <font size = "20" color = "#3CAA3C"><a >JustryDeng</a></font> <img
 * src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
 * @since 1.0.0
 */
@Component
public class RedisPrefixSaTokenDaoRedisJackson extends SaTokenDaoRedisJackson {
        
    private static final String REDIS_CACHE_PREFIX = "project-name:";

    @Override
    public String get(String key) {
        key = appendCachePrefix(key);
        return super.get(key);
    }
    
    @Override
    public void set(String key, String value, long timeout) {
        key = appendCachePrefix(key);
        super.set(key, value, timeout);
    }
    
    @Override
    public void update(String key, String value) {
        key = appendCachePrefix(key);
        super.update(key, value);
    }
    
    @Override
    public void delete(String key) {
        key = appendCachePrefix(key);
        super.delete(key);
    }
    
    @Override
    public long getTimeout(String key) {
        key = appendCachePrefix(key);
        return super.getTimeout(key);
    }
    
    @Override
    public void updateTimeout(String key, long timeout) {
        key = appendCachePrefix(key);
        super.updateTimeout(key, timeout);
    }
    
    @Override
    public Object getObject(String key) {
        key = appendCachePrefix(key);
        return super.getObject(key);
    }
    
    @Override
    public void setObject(String key, Object object, long timeout) {
        key = appendCachePrefix(key);
        super.setObject(key, object, timeout);
    }
    
    @Override
    public void updateObject(String key, Object object) {
        key = appendCachePrefix(key);
        super.updateObject(key, object);
    }
    
    @Override
    public void deleteObject(String key) {
        key = appendCachePrefix(key);
        super.deleteObject(key);
    }
    
    @Override
    public long getObjectTimeout(String key) {
        key = appendCachePrefix(key);
        return super.getObjectTimeout(key);
    }
    
    @Override
    public void updateObjectTimeout(String key, long timeout) {
        key = appendCachePrefix(key);
        super.updateObjectTimeout(key, timeout);
    }
    
    @Override
    public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
        prefix = appendCachePrefix(prefix);
        return super.searchData(prefix, keyword, start, size, sortType);
    }
    
    /**
     * 增加sa-token相關(guān)redis cache前綴
     */
    private static String appendCachePrefix(String key) {
        if (key == null) {
            return null;
        }
        if (key.startsWith(REDIS_CACHE_PREFIX)) {
            return key;
        }
        return REDIS_CACHE_PREFIX + key;
    }
}


參考資料

https://gitee.com/dromara/sa-token/issues/IA83M3?skip_mobile=true

標(biāo)簽:

廈門奇站網(wǎng)絡(luò)科技有限公司

電話:13313868605

QQ:3413772931

地址:廈門集美區(qū)軟件園三期

網(wǎng)站地圖


                    掃一掃加我咨詢