Shiro----授权

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

🍎合抱之木,生于毫末;百丈之台,起于垒土;千里之行,始于足下。------《老子》
🍊今日学习任务!!!!!
🍊1、授权是什么?
🍊2、权限的粒度有哪几种 , 简要说明
🍊3、shiro授权指的是什么

🔥一、授权的定义

🍊授权: 给身份认证通过的任授予某些资源的访问权限

🌙1.1、权限的粒度

🍊权限的粒度: 1 、粗粒度 2、细粒度
🍊 粗粒度 User 具有CRUD的操作(就是增删改查操作)通常指的是表的操作
🍊 细粒度 只要求查询username = “wang” 的用户 需要室友业务代码实现

🍊Shiro的授权是粗粒度
🍊角色:角色就是权限的集合 (打一个比方 , 比如我们玩的英雄联盟手游 , 大致角色分为 玩家 、开发者 等)
像你我他 登录进游戏 就属于玩家的集合 , 我们最近手游更新了,出来一个水晶玫瑰的活动. 像这种更新活动,就属于开发的范畴 , 不管是界面制作的人员还是系统更新的人员大致属于开发人员
上面对角色的理解为个人理解

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

🔥二、授权代码的实现

shiro_principalcollection.ini
在这里插入图片描述
测试代码

package wr.oyc.shiro;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.UnauthenticatedException;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

import java.util.Arrays;

public class Mian2 {
    public static void main(String[] args) {


        //解析配置文件
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro_principalcollection.ini");

        //获取实例
        SecurityManager security = factory.getInstance();

        SecurityUtils.setSecurityManager(security);

        //获取Subject对象
        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken usernamePasswordToken =
                new UsernamePasswordToken("admin" , "123456") ;


        subject.login(usernamePasswordToken);

        if(subject.isAuthenticated()){

            System.out.println("success");

        }else{
            System.out.println("false");
        }

//      一、  使用hashRoel进行单个授权  、hashRoels进行多个授权 (小提示可以使用Arrays.asList("a" , "b" , "c") 将a 、b 、c变成list集合)
        //分配角色
        boolean b = subject.hasRole("role1") ;
        boolean [] c = subject.hasRoles(Arrays.asList("role1" , "role2")) ;

       //可以使用checkRole判断指定用户是否具有对应角色
        //如果指定用户下没有对应的角色就会抛出异常UnauthorizedException

//        单个判定
            subject.checkRole("role1");
//         多个判定
//            subject.checkRoles("role1" , "role2");



//            二、基于资源的授权
        //查看是否分配权限
        boolean flag1 = subject.isPermitted("find") ;

//        判断是否具有多个资源
//        使用isPermitted、isPermittedAll都可以
//        但是返回值不同
//        isPermitted()方法返回boolean[] , isPermittedAll()方法返回boolean
        boolean [] flag2 = subject.isPermitted("add" , "delete");
        boolean  flags = subject.isPermittedAll("add" , "delete") ;

        //通过checkPermission进行判定指定用户下是否有指定的资源
        //如果没有就会抛出UnauthorizedException

        //admin  = 123456 , role1    , role1的权限有add,update,delete
        subject.checkPermission("add");
    //    subject.checkPermissions("add" , "find");


    }
}

效果图
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洋葱爱代码

互相学习,互相进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值