shiro:实现权限缓存
最新推荐文章于 2022-03-21 16:56:58 发布
原创
最新推荐文章于 2022-03-21 16:56:58 发布
·
642 阅读
·
0
·
0
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章标签:
#缓存
shiro
专栏收录该内容
9 篇文章
订阅专栏
本文介绍了如何在Spring Boot项目中,通过引入Apache Shiro和EhCache实现权限缓存,以提升系统性能。首先,添加Shiro和Spring Context Support的相关依赖。接着,配置EhCache Manager并设置缓存策略,确保在用户访问权限控制时,Shiro只进行一次权限验证并缓存结果。然后,配置Session Manager以设定session过期时间和管理无效session。最后,提供了ehcache-shiro.xml配置文件,详细配置了缓存的参数,如最大内存元素数量、硬盘缓存、过期策略等。通过这种方式,可以有效地减少数据库查询,提高系统的响应速度。
摘要生成于
C知道
,由 DeepSeek-R1 满血版支持,
前往体验 >
shiro:实现权限缓存
1.添加依赖
2. 注入缓存
/**
* 不指定名字的话,自动创建一个方法名第一个字母小写的bean
* @Bean(name = "cacheManager")
* shiro缓存对象,防止当每次访问带权限的请求时,shiro都去执行权限认证,进行查询权限
* 也就是说,只需给shiro一次权限即可(缓存),不需要每次查询权限
* @return
*/
@Bean
public EhCacheManager cacheManager() {
EhCacheManager cacheManager = new EhCacheManager();
cacheManager.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");
return cacheManager;
}
@Bean("sessionManager")
public SessionManager sessionManager(){
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
//设置session过期时间
sessionManager.setGlobalSessionTimeout(60 * 60 * 1000);
//定期验证session
sessionManager.setSessionValidationSchedulerEnabled(true);
//删除无效session
sessionManager.setDeleteInvalidSessions(true);
// 去掉shiro登录时url里的JSESSIONID
sessionManager.setSessionIdUrlRewritingEnabled(false);
if (this.connectionFactory() != null){
//设置sessionDAO
sessionManager.setSessionDAO(sessionDAO());
if (sessionListeners != null && !sessionListeners.isEmpty()) {
sessionManager.setSessionListeners(sessionListeners);
}
sessionManager.setSessionIdCookieEnabled(true);
}else {
//这里俩种方式选择一种
sessionManager.setCacheManager(cacheManager());
}
return sessionManager;
}
3. 添加配置文件
在src/main/resouces中添加ehcache-shiro.xml配置文件:
maxElementsInMemory="100000" eternal="false" overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/>