本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名原文链接~~~

安全/权限框架Shiro(12)之权限注解

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:


介绍

权限注解的作用就是修饰一个方法,让这个方法只有在当前 Subject 满足一定的条件时才能访问。

  • @RequiresAuthentication :当前 Subject 已经通过 login 进行了身份验证,即 Subject.isAuthenticated 方法返回 true 时。
  • @RequiresUser :当前 Subject 已经身份验证或通过“记住我”自动登录。
  • @RequiresGuest :当前 Subject 没有身份验证(包含通过“记住我”登录),为游客身份时。
  • @RequiresRoles(value={"admin","user"},logical=Logical.AND) :当前 Subject 需要拥有角色 adminuser
  • @RequiresPermissions(value={"user:a","user.b"},logical=Logical.OR) :当前 Subject 需要拥有权限 user:auser:b

使用示例

1、新建测试使用的 Controller 并使用 Shiro 注解:

// com.zze.shiro.controller.TestController
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {

    @RequestMapping("testHasRole")
    @RequiresRoles({"admin"})  // 只有拥有 admin 角色的用户才可以访问
    public String testHasRole() {
        System.out.println("from testHasRole");
        return "redirect:list.jsp";
    }
}

2、修改 list.jsp

<!-- list.jsp -->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
Welcome 【<shiro:principal/>】 <br>
<h3>List Page</h3>

<a href="/user.jsp">user</a> <br>
<a href="/admin.jsp">admin</a><br>
<a href="/logout">logout</a><br>
<a href="/testHasRole">testHasRoleAnno</a>
</body>
</html>

3、测试以 admin 用户登录,访问 localhost:8080/testHasRole ,正常访问。

4、测试以 user 用户登录,访问 localhost:8080/testHasRole ,抛出如下异常:

image.png

此时我们就可以通过 SpringMVC 的【全局异常处理】来捕获这个异常,给用户返回友好的页面。

如注解失效,需要将下面配置移到 SpringMVC 核心配置文件中:

<!--
配置 lifecycleBeanPostProcessor,可以自动调用配置在 Spring IOC 容器中 Shiro bean 的生命周期方法
-->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

<!--
启用 IOC 容器中使用 Shiro 注解,必须在配置 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  

如果这篇文章对您有帮助,可点击下方链接分享给你的朋友们😋,如果遇到问题欢迎评论、留言~~~😇

评论

公众号:zze_coding

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×