Shiro(三)——Shiro授权入门案例
1)Shiro授权过程
2)授权方式
shiro支持三种方式的授权:
- 编程式:通过写if/else授权代码块完成:
Subject subject = SecurityUtils.getSubject();
if(subject.hasRole("admin")){//有权限
}else{//无权限
}
- 注解方式:通过在执行的java 方法上放置相应的注解完成:
@RequiresRoles("admin")
public void hello(){//有权限
}
- jsp标签: 在jsp页面通过相应的标签完成
<shiro:hasRole name="admin">
<!-- 有权限 -->
</shiro:hasRole>
3)编写shiro-permission.ini
创建存放权限的配置文件shiro-permission.ini,里面的内容相当于在数据库里面:
[users]
#用户admin的密码是123,此用户具有role1和role2两个角色
admin=123,role1,role2
#zs的密码是123,此用户拥有role2角色
zs=123,role2[roles]
#角色role1对资源user拥有create、update权限
role1=user:create,user:update
#角色role2对资源user拥有create权限
role2=user:create
在ini文件中用户、角色、权限的配置规则是:“用户名=密码,角色1,角色2…” “角色=权限1,权限2…”,首先根据用户名找角色,再根据角色找权限,角色是权限集合。
权限字符串规则
权限字符串的规则是:“资源标识符:操作:资源实例标识符”,意思是对哪个资源的哪个实例具有什么操作,“:”是资源/操作/实例的分割符,权限字符串也可以使用*通配符。
例子:
- 用户创建权限:user:create,或user:create:*
- 用户修改实例001的权限:user:update:001
- 用户实例001的所有权限:user:*:001
4)测试代码
@Test
public void testPermission(){//创建securityManager工厂,通过ini配置文件创建securityManager工厂Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro-permission.ini");//创建SecurityManagerSecurityManager securityManager=factory.getInstance();//将securityManager设置到当前运行环境中SecurityUtils.setSecurityManager(securityManager);//从SecurityUtils里边创建一个subjectSubject subject = SecurityUtils.getSubject();//对主体对象进行认证//用户登录//设置用户认证的身份(prinicipals)和凭证(credentials)UsernamePasswordToken token = new UsernamePasswordToken("admin", "123");subject.login(token);//用户认证状态//是否认证通过boolean isAuthenticated =subject.isAuthenticated();System.out.println("是否认证通过:"+isAuthenticated);//用户授权检测 基于角色授权//是否有某一个角色System.out.println("用户是否拥有一个角色:" + subject.hasRole("role1"));// 是否有多个角色System.out.println("用户是否拥有多个角色:" + subject.hasAllRoles(Arrays.asList("role1", "role2"))); //判断角色 没有则直接报异常//subject.checkRole("role2");// 基于资源授权System.out.println("是否拥有某一个权限:" + subject.isPermitted("user:delete"));//检查权限//subject.checkPermission("sys:user:delete");//subject.checkPermissions("user:create:1","user:delete");
}
5)自定义realm
与上面认证自定义realm一样,大部分情况是要从数据库获取权限数据,这里直接实现基于资源的授权。
编写自定义realm
在认证章节写的自定义realm类中完善doGetAuthorizationInfo方法,此方法需要完成:根据用户身份信息从数据库查询权限字符串,由shiro进行授权。
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {//获取身份信息String username=(String) principals.getPrimaryPrincipal();//根据身份信息从数据库中查询权限数据//...从这里使用静态数据模拟List<String> permissions=new ArrayList<String>();permissions.add("user:create");permissions.add("user:delete");//将权限信息封闭为AuthorrizationInfoSimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();for(String permission:permissions){simpleAuthorizationInfo.addStringPermission(permission);}return simpleAuthorizationInfo;
}
配置realm
ini配置文件还使用认证阶段使用的,不用改变。
修改test中创建securityManager工厂的配置文件
//创建securityManager工厂,通过ini配置文件创建securityManager工厂
Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro-realm.ini");
6)授权执行流程
- 执行subject.isPermitted(“user:create”)
- securityManager通过ModularRealmAuthorizer进行授权
- ModularRealmAuthorizer调用realm获取权限信息
- ModularRealmAuthorizer再通过permissionResolver解析权限字符串,校验是否匹配
下一章我们详细Spring整合shiro的使用
Shiro(三)——Shiro授权入门案例相关推荐
- Mybatis-Plus(入门篇 ==> 三分钟完成入门案例
本章导学: 创建SpringBoot导入坐标 编写配置文件 创建实体类 创建mapper继承BaseMapper 测试 本章所使用的数据 -- MySQL dump 10.13 Distrib 8.0 ...
- Phoenix安装、入门案例
目录 一.Phoenix简介 1.什么是Phoenix 2.Phoenix性能 二.Phoenix的安装部署 三.Phoenix入门案例 四.建立与HBase表映射 五.使用Phoenix构建二级索引 ...
- Shiro框架:授权流程、授权方式、Shiro授权入门程序、自定义Realm进行授权
一.Shiro授权: 1.授权与权限: (1)授权:访问控制,必须具有该资源的访问权限才可以访问该资源. (2)权限模型:标准权限数据模型包括 :用户.角色.权限(包括资源和权限).用户角色关系.角色 ...
- Shiro笔记(三)授权
Shiro笔记(三)授权 一.授权方式 1.编程式: 1 Subject subject=SecurityUtils.getSubject(); 2 if(subject.hasRole(" ...
- Shiro认证和授权
shiro介绍 什么是shiro Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. ...
- 视频教程-Apache Shiro权限框架实战+项目案例视频课程-Java
Apache Shiro权限框架实战+项目案例视频课程 拥有10余年项目实战经验. 2006-2011在nttdata从事对日软件开发类工作. 2011-2015在HP从事技术服务工作. 擅长于j2e ...
- shiro认证与授权
1.shiro认证 1.1.身份验证 身份验证:一般需要提供如身份ID等一些标识信息来表明登录者的身份,如提供email,用户名/密码来证明. 在shiro中,用户需要提供principals(身份) ...
- 运用Maven 搭建SSM框架,并用shiro控制登录授权
一.准备工作 jdk1.8环境,maven3.x安装(指定本地仓库地址),Tomcat7以上安装 本次使用Eclipse搭建项目 Eclipse 的编译环境设置一下,utf-8 二.新建Maven工程 ...
- shiro.ini实现授权
shiro.ini实现授权 前提:必须先认证通过之后有授权之说 1,授权概述 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体 ...
- matlab快速入门案例及常用技巧 | 《matlab数学建模方法与实践(第三版)》学习笔记
目录 快速入门案例: 解决流程: 具体实现: 一.获取数据 二.数据探索和建模 三.分享结果 常用技巧 一.常用标点功能 二.常用操作指令 三.指令编辑操作键 四.matlab数据类型 五.开发模式 ...
最新文章
- Centos5.5完整安装Cacti+Spine
- 电商平台 高并发 微服务 方案_Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战...
- WSL+VSCODE体验UBUNTU环境下的开发
- web project、web service project和java project的区别
- Linux学习之后台运行进程
- scala的数值类型(三)
- 计算机应用技术和信息化,浅析企业计算机应用技术和信息化建设
- dpdk大页内存实现
- TCMPC进阶之路——accumulate函数应用
- 学会Java输入输出流,看这一篇就够了,建议收藏!
- 阿里云E-HPC+i4p大内存实例,加速寻因生物单细胞数据分析效率
- 关于2440嵌入式MPlayer播放器的移植方法
- 阿里云 EMAS Serverless 重磅发布
- C语言标准ANSI C、C语言的特点、C语言的关键字(32个)
- 如何真正做好客户管理
- 计算机组成原理复习提纲六(CPU结构和功能)
- 项目管理工具之Git/GitHub/Gitee/Gitlab
- android p 牛轧糖_如何启用Android牛轧糖的猫收集复活节彩蛋
- 详解六种常见的上下文切换场景
- 【WWW 2021】【阿里小蜜】QAMaker:一站式的文档问答对抽取
热门文章
- 动手设计 CPU(三)—— 微程序控制的存储器读写系统设计
- 【洛谷 P3384】树链剖分【详解树链剖分】
- 上海自考计算机应用基础实践,上海自考《计算机应用基础》试题练习(八)
- php autosub,教你用PHP实现微信小程序人脸识别刷脸登录功能
- mysql两个下拉框_两个下拉框的纠葛
- sql依据单个字段去重_Java面试之常用SQL
- YAML_06 playbook从上往下顺序执行,若报错,不提示,继续往下执行
- hadoop ha环境下的datanode启动报错java.lang.NumberFormatException: For input string: 10m
- Java Web GenericServlet
- 使用“牛顿迭代法”求解方程