package com.project.shiro.util.redis; import cn.wisenergy.service.common.utils.redis.RedisClient; import cn.wisenergy.service.common.utils.redis.RedisConsts; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import org.apache.shiro.cache.CacheManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class ShiroRedisCacheManager implements CacheManager { private static final Logger logger = LoggerFactory.getLogger(ShiroRedisCacheManager.class); private final ConcurrentMap<String, Cache> caches = new ConcurrentHashMap<String, Cache>(); //注入redisClient实例 @Resource(name = "redisClient") private RedisClient redisClient; /** * shiro权限缓存前缀 */ private String keyPrefix = RedisConsts.ADMIN_SHIRO_REALM_KEY; @Override public <K, V> Cache<K, V> getCache(String name) throws CacheException { logger.debug("获取名称为: " + name + " 的RedisCache实例"); Cache c = caches.get(keyPrefix + name); if (c == null) { c = new ShiroRedisCache<K, V>(redisClient, keyPrefix); caches.put(keyPrefix + name, c); } return c; } public RedisClient getRedisClient() { return redisClient; } public void setRedisClient(RedisClient redisClient) { this.redisClient = redisClient; } public String getKeyPrefix() { return keyPrefix; } public void setKeyPrefix(String keyPrefix) { this.keyPrefix = keyPrefix; } }