我们将建立在URL上的权限控制称之为粗颗粒访问控制,shiro还支持细颗粒授权控制,细颗粒授权控制包括:方法级别与代码级别。
1. 方法级别控制
对某个方法加访问控制,用户必须拥有某项权限才可以访问该方法,没有权限则抛出异常,无法访问
1.1 开启注解
在applicationContext_shiro.xml中添加
<!-- 启动shiro注解 -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor" >
<!-- 默认使用JDK代理 ,如被代理类没有实现接口,必须使用下列配置开启 cglib代理 -->
<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager" />
</bean>
<!-- 对安全管理器 增强代码 , spring 后处理器 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
1.2 在方法上添加注解——@RequiresPermissions
例如:
当访问用于拥有订单保存权限的时候,才能执行保存,否则报错
2. 代码块的权限控制——isPermitted
我们在写自定义权限过滤器的时候,使用过一个方法isPermitted,当权限存在的时候,就返回true,代码块级别的权限控制也可以通过该方式来完成,
首先通过静态类SecurityUtils获取到主题对象subject,然后就可以调用subject的isPermitted方法了,如图:
在操作审核之前判断其有没有审核的权限,这个权限码是在shiro核心配置文件中配置了的。