摘自:http://www.cnblogs.com/wq3435/p/6271381.html
shiro通过注解进行权限验证:

在shiro的xml配置文件里设置
lifecycleBeanPostProcessor和securityManager是在shiro配置文件中定义好的:<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true" /> </bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean>
<!-- Shiro安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="jdbcRealm"></property>
<property name="cacheManager" ref="cacheManager"></property>
</bean>当权限验证不通过时或报错:
org.apache.shiro.authz.AuthorizationException: Not authorized to invoke method: public void com.java.shiro.services.ShiroService.shiroServiceMethod()
对于异常可以使用 spring 的声明式异常搞出一个错误页面,使用注解 @ExceptionHandler 和 @ControllerAdvice
这里有一个问题要注意:
在Service方法上使用注解 @Transactional 即在方法开始的时候会有事务,这个时候这个Service已经是一个代理对象,
这个是有把 权限注解加到 Service上是不好用的,会发生类型转换异常。需要加到Controller上,因为不能够让Service是代理的代理。
本文介绍如何在Shiro配置文件中使用注解实现权限验证,并解决权限验证失败时的异常处理问题。同时讨论了在Service层使用@Transactional注解时权限验证的局限性。
4372

被折叠的 条评论
为什么被折叠?



