sa token接入redis后,默認(rèn)的key為satoken,雖然可以通過(guò)指定db索引的方式來(lái)區(qū)別不同項(xiàng)目,但是無(wú)法根據(jù)項(xiàng)目來(lái)設(shè)置。
解決方法:
排除SaTokenDaoRedisJackson
spring.autoconfigure.exclude=cn.dev33.satoken.dao.SaTokenDaoRedisJackson
重寫(xiě)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)一前綴存儲(chǔ)進(jìn)redis
* <h3>具體實(shí)現(xiàn)步驟:</h3>
* <ul>
* <li>
* 第一步:排除{@link SaTokenDaoRedisJackson}自動(dòng)裝配。如通過(guò)配置文件排除:
* {@code
* spring:
* autoconfigure:
* exclude:
* - cn.dev33.satoken.dao.SaTokenDaoRedisJackson
* }
* </li>
* <li>
* 第二步:重寫(xiě)SaTokenDaoRedisJackson并注冊(cè)進(jìn)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
- 版權(quán)所有:奇站網(wǎng)絡(luò) 轉(zhuǎn)載請(qǐng)注明出處
- 廈門(mén)奇站網(wǎng)絡(luò)科技有限公司,專業(yè)提供網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),小程序開(kāi)發(fā),系統(tǒng)定制開(kāi)發(fā)。
- 軟件開(kāi)發(fā)咨詢熱線:吳小姐 13313868605