用shiro注解实现方法级别的权限控制,加了一个@RequiresRoles("qqq") 发现没起作用,翻了官方文档发现要加这么两个配(与spring集成时):
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean>
用的是spring4,配置这两个bean后启动时报错了,报了一大串,最后是这么个错:no matching editors or conversion strategy found 查了一下说是这么个问题:
Spring注入的是接口,关联的是实现类。 这里注入了实现类,所以报异常了。
就在配置第一个bean时加了一句
<property name="proxyTargetClass" value="true"/>
最后是这样的:
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" > <property name="proxyTargetClass" value="true"/> </bean>
这样重启了一下不报错了。但是发现注解还没起作用,后来发下我把注解放在Controller上了,而这两个bean我配置在了父容器的xml中,我配置的是父容器不扫描Controller,让mvc容器扫描Controller,所以无法应用aop。将注解放在由父容器扫描的service上试了试,可以用了。