038 使用shiro的方法注解方式进行权限控制 - bos

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了038 使用shiro的方法注解方式进行权限控制 - bos相关的知识,希望对你有一定的参考价值。


1.在Spring的配置文件中开启shiro的注解支持

<!-- 开启shiro框架注解支持 -->
<bean id="defaultAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 表示必须使用cglib方式为Action创建动态代理对象 -->
<property name="proxyTargetClass" value="true"/>
</bean>

<!-- 配置shiro框架提供的切面类,用于创建代理对象 -->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"></bean>

2.在Action的方法上添加注解,注明调用方法需要的权限

1.下面的注解表示执行StaffAction的deleteBatch方法需要用户具有staff-delete权限

/**
* 批量删除
* @return
*/
@RequiresPermissions("staff-delete")
public String deleteBatch(){
staffService.deleteBatch(ids);
return LIST;
}

3.注意开启注解时,proxyTargetClass要设置为true

<1>该属性默认为false,表示使用JDK提供的动态代理创建目标Action的代理对象,这要求目标类必须对接口编程
<2>这在StaffAction中并不适用,虽然StaffAction实现了接口,但向页面提供的方法并不是用接口定义的,因此若不设置为true将无法代理Action中的方法
<3>设置为true,表示使用cglib进行代理对象的创建,由于cglib是利用继承进行代理,因此对任何类都是适用的

4.当用户不具有权限时,核心过滤器会直接抛出异常,若不捕获则会直接再页面回显,用户不友好,因此要利用表现层框架捕获异常

5.在struts.xml中配置捕获权限不足所抛出的异常,并配置对应的处理页面,注意全局异常要在全局结果集的后面

<global-results>
<result name="login">/login.jsp</result>
<result name="unauthorized">/unauthorized.jsp</result>
</global-results>

<!-- 配置全局异常捕获 -->
<global-exception-mappings>
<exception-mapping result="unauthorized" exception="org.apache.shiro.authz.UnauthorizedException"/>
</global-exception-mappings>

以上是关于038 使用shiro的方法注解方式进行权限控制 - bos的主要内容,如果未能解决你的问题,请参考以下文章

了解权限控制框架shiro 之实际应用.

shiro框架学习-7- Shiro权限控制注解和编程方式

shiro注解权限控制-5个权限注解

Shiro Ajax请求没有权限返回JSON,没有登录返回JSON

Shiro 权限注解

BOS项目 第7天(shiro权限框架进行认证和授权)