✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
🍎合抱之木,生于毫末;百丈之台,起于垒土;千里之行,始于足下。------《老子》
🍊今日学习任务!!!!!
🍊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");
}
}
效果图