摘自:http://www.cnblogs.com/wq3435/p/6271381.html
shiro通過註解進行權限驗證:
在shiro的xml配置文件裏設置
<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>
lifecycleBeanPostProcessor和securityManager是在shiro配置文件中定義好的: <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是代理的代理。