zoukankan      html  css  js  c++  java
  • shiro注解权限控制-5个权限注解

     
    • RequiresAuthentication:

    使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证

    • RequiresGuest:

    使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过认证或者在原先的session中存在记录。

    • RequiresPermissions:

    当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。

    • RequiresRoles:

      当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当天Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常。

    •   RequiresUser

    当前Subject必须是应用的用户,才能访问或调用被该注解标注的类,实例,方法。

    使用方法:

    Shiro的认证注解处理是有内定的处理顺序的,如果有个多个注解的话,前面的通过了会继续检查后面的,若不通过则直接返回,处理顺序依次为(与实际声明顺序无关):

    RequiresRoles 
    RequiresPermissions 
    RequiresAuthentication 
    RequiresUser 
    RequiresGuest

    例如:你同时声明了RequiresRoles和RequiresPermissions,那就要求拥有此角色的同时还得拥有相应的权限。

    1) RequiresRoles

    • 可以用在Controller或者方法上。可以多个roles,多个roles时默认逻辑为 AND也就是所有具备所有role才能访问。
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresRoles {
        String[] value();
        Logical logical() default Logical.AND; 
    }
    • 示例
    复制代码
    //属于user角色
    @RequiresRoles("user")
    
    //必须同时属于user和admin角色
    @RequiresRoles({"user","admin"})
    
    //属于user或者admin之一;修改logical为OR 即可
    @RequiresRoles(value={"user","admin"},logical=Logical.OR)
    复制代码

    2) RequiresPermissions

    • 与 RequiresRoles类似
       
    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface RequiresPermissions {
        String[] value();
        Logical logical() default Logical.AND;
    }
    
    //符合index:hello权限要求
    @RequiresPermissions("index:hello")
     
    //必须同时复核index:hello和index:world权限要求
    @RequiresPermissions({"index:hello","index:world"})
     
    //符合index:hello或index:world权限要求即可
    @RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)
    
       

    3) RequiresAuthentication,RequiresUser,RequiresGuest  

    • 这三个的使用方法一样
    @RequiresAuthentication
    @RequiresUser
    @RequiresGusst
    注:Shiro依赖于slf4j,commons-beanutils,commons-logging三个jar包。
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/tobiasy/p/10320413.html
Copyright © 2011-2022 走看看