解决:shiro添加注解@RequiresPermissions不起作用

场景:
    spring集成shiro时,在Controller方法上添加注解@RequiresPermissions无效,代码示例如下

@GetMapping("/{id}")
@RequiresPermissions("sys:user:query")
public User user(@PathVariable Long id) {
	User user = userDao.getById(id);
	return user;
}

解析:
    @RequiresPermissions作用是使用shiro权限框架时,用户在正确登入系统后,
    当调用带有@RequiresPermissions("sys:user:query")注解的方法是,
    系统会直接进入doGetAuthorizationInfo方法进行注入授权信息,为系统权限验证提供权限数据。
    doGetAuthorizationInfo是org.apache.shiro.realm.AuthorizingRealm的一个抽象方法,
    使用时继承AuthorizingRealmdo在doGetAuthorizationInfo方法类实现自定义授权,
    比如从数据库查出权限信息,shiro会使用这些信息进行权限验证.
解决:
   1.在springmvc.xml配置文件中加入如下配置信息

<!-- 支持Shiro对Controller的方法级AOP安全控制 2019-3-21 start-->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
	<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<prop key="org.apache.shiro.authz.UnauthorizedException">error/403</prop>
			<prop key="java.lang.Throwable">error/500</prop>
		</props>
		</property>
</bean>
<!-- 支持Shiro对Controller的方法级AOP安全控制 end -->

  2.spring-context-shiro.xml配置文件中添加如下信息

<!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<!-- AOP式方法级权限检查  -->
<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>

 以上,TKS.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值