Spring+SpringMVC+Shrio 开启Shiro权限注解无效

在Spring的配置中文件中配置好了Shiro的注解支持Bean。但是在Service中通过注解授权的时候就是不能生效。配置如下:

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<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>

首先,上面的配置是正确的,可是为什么不生效呢,今天我就来说说这事儿。

我们知道Shiro的注解授权是基于Spring的AOP实现的。在程序启动时会自动扫描作了注解的Class,当发现注解时,就自动注入授权代码实现。也就是说,要注入授权控制代码,第一处必须要让框架要可以扫描找被注解的Class 。当你在Spring配置文件中配置了Shiro的SecurityManager,当ApplicationContext.xml文件扫描bean注解或者注入配置文件中的bean时,将该bean相关的授权代码一并注入实现。而我们没有在SpringMVC.xml文件中去注入bean的话,那么在ApplicationContext.xml文件中配置的Shiro注解授权也是不会有用的。一定要在配置了Shiro注解授权的文件中进行bean 的注入或扫描,授权才可以生效。

不过新的问题又来了,一般使用Spring和SpringMVC的话,会在Spring文件中配置Service和DAO的bean,在SpringMVC的配置文件中配置Controller。也就是要对Controller,Service等同样进行授权控制。同时要控制Controller和Service,那么采用相同的方式,我们可以在ApplicationContext.xmlSpringMVC.xml中配置类同的配置,以达到相同的效果。

<bean id="serviceAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
    <bean id="serviceAuthorizationAttributeSourceAdvisor" class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

在SpringMVC的配置文件中进行同样配置

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

此时,我们在同一个项目中配置了两个,DefaultAdvisorAutoProxyCreatorAuthorizationAttributeSourceAdvisor.需要给它们指定不同的ID。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容