一 . 概述
在shiro之中有三种方式进行权限的管理,
(1)硬编码的方式,如subject.hasRole()这样的方式在代码之中织入.
(2)使用注解的方式进行权限管理
(3)使用jsp标签的方式进行权限控制
本节,我们使用注解的方式进行配置.
二 .环境的配置
<!-- 配置Bean的生命周期后置管理器 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"></bean> <!-- 配置代理创建器 此对象需要依赖Bean后处理器 --> <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>
上面的配置需要在我们的spring.xml之中配置.
说明,如果我们想要拦截controller,那么我们就需要将此配置放置在springmvc.xml的配置文件之中.
如果我们想要拦截service的代码,我们就需要将此配置文件放置到spring.xml文件之中.
总的来说,这个是由spring的父子容器造成的.
三 .测试代码
@RestController public class AdviceController { //该注解表示此功能需要认证才能访问 @RequiresAuthentication @RequestMapping("/advice") public String advice() { return "advice"; } }
上面的方式是需要认证之后才能进行访问的,当我们没有认证的时候,我们就不能进行访问.
此时,会抛出一个异常的信息来.
我们可以做一个全局的异常拦截器,将页面重定向到登录页面.
四.总结
完成shiro的注解配置十分的简单,只需要配置几个Bean就能完成.
但是我们思考这么一个问题,我们使用注解其实就是硬编码.只不过编写注解变得简单了.
因此,我们拒绝使用角色的注解,而是使用权限的注解.
这样我们可以通过分配权限来完成权限的动态分配,如果分配的是角色,那么我们这种动态性就不存在了.