shiro开启注解配置后@RequiresRole无效或导致@Autowired 失效

在使用shiro时,打算启用shiro的注解功能如下:

@RequestMapping(method = RequestMethod.GET,value = "/menuManager")
@RequiresPermissions("sys:menu:*")
public String  menusManager(Model model){ 
	return "/sys/menuManager";
}

 

于是在配置中加入shiro注解的配置

 

<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>

 启动时会报错 java.lang.IllegalArgumentException: Can not set  *.Service field *.Controller.Service to $Proxy47,研究后发现只要把配置改成

 

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
    <property name="proxyTargetClass" value="true" /> 
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor" >
    <property name="securityManager" ref="securityManager"/>
</bean>

 就不会再报错了,但是启动项目在测试中发现@RequiresRole  @RequiresPermissions 这些注解并没有实际的拦截,不管有没有权限都一样可以通过请求。

后来把上面配置中的Aop代理配置改成

 

<aop:config proxy-target-class="true"></aop:config> 
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor" >
     <property name="securityManager" ref="securityManager"/>
</bean>

 

 然后shiro注解正常生效了。具体原因待研究。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值