shiro 注解不起作用bug 解决
环境: spring 3.2.5 + struts2 + shrio 1.2
为使用aop 注解,根据官方文档增加拦截器。
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true" /> </bean> <bean id="shiroAdvisor" class="com.ichangyan.tsp.common.security.AuthorizationAdvice"> <property name="securityManager" ref="securityManager"/> </bean>
预想service 层不会有问题,因为service 层完全是spring 关联。action 层需要测试。
测试结果很诧异,action 层注解没有问题,反而service 层不起作用,且任何提示没有,也没任何错误,只是简单的忽略了注解。
本以为是拦截器问题,另起项目测试,拦截器没任何问题。后面注解到 service 接口方法上,终于报错了,什么final 不能被代理,但系统注解的类并没有final。 不过可以分析出肯定与cglib的代理有关。 debug 发现拦截起作用了,但拦截到我们注解方法的时候发现,target 是个代理类com.sun.**。 原因终于出来了,前面还有拦截器在起作用了,经排查原来是事务拦截器,真原因是找到了解决也就简单了。
把<tx:annotation-driven> 加上proxy-target-class="true" 即可了。
原因jdk 代理注解不会被继承。