文档章节

Spring Cache 和 Apache Shiro整合的超级深坑

lis1314
 lis1314
发布于 2016/07/04 21:51
字数 321
阅读 247
收藏 8

历时1天,跟踪了一天spring aop的源代码。最后在google上找到了答案。

写个笔记记录,希望遇到相同问题的同学,可以避免这个问题。

问题概述

项目到了尾声,需要使用缓存进行优化,项目中使用了shiro技术作为权限框架,spring cache注解形式进行缓存。

发现cache没有起到作用,匪夷所思。于是跟踪spring aop 的源代码发现,在bean创建代理类的过程,根本没有创建spring的cache对象,下面是debug跟踪的具体方法

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(Class<?>, String, Object[], TargetSource)

后来注释掉了shiro配置文件中的

<!-- 开启shiro注解支持 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
	<property name="securityManager" ref="securityManager" />
</bean>

发现可以正常创建ceche代理对象。
 

最后解决方案,只需要在自定义的shiroRealm中引用service时,加上

@Lazy

一切都正常了。。

具体问题产生原因参考

http://stackoverflow.com/questions/21512791/spring-service-with-cacheable-methods-gets-initialized-without-cache-when-autowi

额外补充另外一个问题

关于spring cache注解使用发现部分方法没有成功进行缓存代理,可进行debug跟踪

org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheOperationInvoker, Object, Method, Object[])

观察具体的方法入参,以及是否生成代理。

© 著作权归作者所有

共有 人打赏支持
lis1314
粉丝 11
博文 25
码字总数 24196
作品 0
丰台
高级程序员
私信 提问
SpringBoot 优雅的整合 Shiro

Apache Shiro是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理。借助Shiro易于理解的API,您可以快速轻松地保护任何应用程序 - 从最小的移动应用程序到最大的...

木云凌
03/19
0
0
SpringMVC + Mybatis + Shiro 权限整合【转】

<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/> , 否则controller无法使用注解. 这个方法可能避免使用sessionValidationScheduler, 就......

结构好可
2016/10/09
220
1
shiro基础配置

spring-shiro.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:......

卯金刀GG
2016/09/09
25
0
SpringBoot整合Shiro使用Ehcache等缓存无效问题

前言 整合有缓存、事务的spring boot项目一切正常。 在该项目上整合shiro安全框架,发现部分类的缓存Cache不能正常使用。 然后发现该类的注解基本失效,包括事务Transaction注解。事务不能正...

巅峰小学生
2018/05/18
0
0
Spring整合Shiro做权限控制模块详细案例分析

1.引入Shiro的Maven依赖 org.apache.shiro shiro-core 1.2.1 org.apache.shiro shiro-web

愉快的鱼儿
2017/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
41分钟前
1
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
42分钟前
5
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
50分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
今天
2
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部