1.url权限控制 (基于过滤器实现)
参考https://blog.csdn.net/kxj19980524/article/details/84898417
2. 使用shiro的方法注解方式权限控制(基于代理技术实现)
在spring配置文件中开启shiro注解支持
<!-- 开启shiro框架注解支持 -->
<bean id="defaultAdvisorAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 必须使用cglib方式为Action对象创建代理对象 ,不写默认是false用的是jdk代理对象根据自己情况自己决定
-->
// <property name="proxyTargetClass" value="true"/>
</bean>
<!-- 配置shiro框架提供的切面类,用于创建代理对象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>
然后就可以在controller方法上加这个注解来控制是否能访问这个方法,括号里的是权限的名字,可以自定义,如果没有该权限的话就会抛出权限不足页面,可以定义一个全局捕捉异常,让统一跳转到指定页面.
在struts.xml中配置全局异常捕获,当shiro框架抛出权限不足异常时,跳转到权限不足提示页面
ssm框架跳转方式,error是跳转的页面,key是异常类型
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.apache.shiro.authz.UnauthorizedException">error</prop>
</props>
</property>
</bean>
3.页面标签权限控制(标签技术实现)
在jsp页面中引入shiro的标签库
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
使用shiro的标签控制页面元素展示
<shiro:hasPermission name="staff-delete"> //这个标签就是进行权限控制的,有name属性里那个权限就显示,没有就不显示,不管js //还是html都可以控制
{
id : 'button-delete',
text : '删除',
iconCls : 'icon-cancel',
handler : doDelete
},
</shiro:hasPermission>