授权的三要素: 用户,角色,权限
把权限 赋给角色, 把角色和一个多个用户相关联
授权: 匹配过程
Shiro判断用户是否有权限的 三种方式
1. 编写代码—— 在java代码中 使用ifelse块 执行授权检查
基于角色:使用Subject的hasRole方法
Subject currentUser = SecurityUtils.getSubject();
//登录过程省略
List<String> roles = new ArrayList<String>();
roles.add("role1");
roles.add("role2");
roles.add("role3");
// 1.检查currentUser是否被分配了角色role1
boolean result1 = currentUser .hasRole("role1");
// 2.检查currentUser是否被分配了所有角色
boolean result2 = currentUser .hasAllRoles(roles);
// 3.检查currentUser是否被分配了所有角色,返回一个与方法参数中目录一致的hasRole结果集
boolean[] results = currentUser .hasRoles(roles);
基于角色:断言支持,与使用hasRole的if else一样
//1.如果currentUser被分配了role1,才会继续执行
currentUser.checkRole("role");
基于权限:Subject的isPermitted方法
boolean flag = currentUser.isPermitted("p1:create");
基于权限:断言支持:Subject的isPermitted方法
currentUser.checkPermission("p1:create");
2 JDK 的注解—— 添加授权注解给java方法
基于注解的做法,需要AOP框架支持。所以需要和Spring集成。>
shiro提供的注解
3 JSP/GSP 标签库 —— 控制基于角色和权限的jsp页面输出