package com.doumee.config.shiro; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheException; import org.apache.shiro.cache.CacheManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * 自定义Shiro CacheManager * @author Eva.Caesar Liu * @since 2025/03/31 16:44 */ @Slf4j @Component public class ShiroCacheManager implements CacheManager { private final ConcurrentMap caches = new ConcurrentHashMap(); private static ApplicationContext applicationContext; @Override public Cache getCache(String name) throws CacheException { log.debug("get cache, name=" + name); Cache cache = this.caches.get(name); if (cache == null) { cache = applicationContext.getBean(ShiroCache.class, "shiro:cache:"); this.caches.put(name, cache); } return cache; } @Autowired public void setApplicationContext (ApplicationContext applicationContext) { if (ShiroCacheManager.applicationContext == null) { ShiroCacheManager.applicationContext = applicationContext; } } }