前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >shiro教程1(HelloWorld)

shiro教程1(HelloWorld)

作者头像
Java帮帮
发布于 2019-12-13 04:32:05
发布于 2019-12-13 04:32:05
38300
代码可运行
举报
运行总次数:0
代码可运行

hiro简介

shiro官网

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

框架图说明

官网架构说明

从外部查看shiro框架

应用代码直接交互的对象是Subject,也就是说Shiro的对外API核心就是Subject

内部结构框架

常见单词说明

Shiro中的shiro.ini说明

shiro.ini放置在classpath路径下shiro会自动查找。 ini配置文件中有四大主要配置类 main users roles urls

main

提供了对根对象securityManager及其依赖对象的配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#创建对象
securityManager=org.apache.shiro.mgt.DefaultSecurityManager

其构造器必须是public空参构造器,通过反射创建相应的实例。

  1. 对象名=全限定类名 相对于调用public无参构造器创建对象
  2. 对象名.属性名=值 相当于调用setter方法设置常量值
  3. 对象名.属性名=$对象引用 相当于调用setter方法设置对象引用

users

提供了对用户/密码及其角色的配置,用户名=密码,角色1,角色2 username=password,role1,role2 例如:配置用户名/密码及其角色,格式:“用户名=密码,角色1,角色2”,角色部分可省略。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[users]
zhang=123,role1,role2
wang=123

roles

提供了角色及权限之间关系的配置,角色=权限1,权限2 role1 = permission1 , permission2 例如:配置角色及权限之间的关系,格式:“角色=权限1,权限2”;如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[roles]
role1=user:create,user:update
role2=*

如果只有角色没有对应的权限,可以不配roles

urls

用于web,提供了对web url拦截相关的配置,url=拦截器[参数],拦截器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/index.html = anon
/admin/** = authc, roles[admin],perms["permission1"]

第一个案例

官方教程

添加对应的依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-core</artifactId>
	<version>1.1.0</version>
</dependency>
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-simple</artifactId>
	<version>1.6.1</version>
	<scope>test</scope>
</dependency>

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.2</version>
</dependency>

添加shiro.ini文件

src/main/resource下添加

添加内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[users]
root = 123456
# 账号为root 密码是 123456

认证操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Test
public void test() {
	// 1.获取SecurityManager工厂对象
	Factory<SecurityManager> factory =
			new IniSecurityManagerFactory("classpath:shiro.ini");
	// 2.通过Factory对象获取SecurityManager对象
	SecurityManager securityManager = factory.getInstance();
	// 3.将SecurityManager对象添加到当前运行环境中
	SecurityUtils.setSecurityManager(securityManager);
	
	// 4.获取Subject对象
	Subject subject = SecurityUtils.getSubject();
	AuthenticationToken token = new UsernamePasswordToken("root", "123456");
	// 登录操作
	subject.login(token);
	// 获取登录的状态
	System.out.println(subject.isAuthenticated());
}

测试

账号密码正确
账号错误

账号错误抛 UnknownAccountException异常

密码错误

密码错误会抛 IncorrectCredentialsException异常

所以代码可以调整下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	@Test
	public void test() {
		// 1.获取SecurityManager工厂对象
		Factory<SecurityManager> factory =
				new IniSecurityManagerFactory("classpath:shiro.ini");
		// 2.通过Factory对象获取SecurityManager对象
		SecurityManager securityManager = factory.getInstance();
		// 3.将SecurityManager对象添加到当前运行环境中
		SecurityUtils.setSecurityManager(securityManager);
		
		// 4.获取Subject对象
		Subject subject = SecurityUtils.getSubject();
		AuthenticationToken token = new UsernamePasswordToken("root", "111");
		// 登录操作
		try {
			subject.login(token);
		} catch (UnknownAccountException e) {
			System.out.println("账号出错...");
		} catch(IncorrectCredentialsException e){
			System.out.println("密码出错...");
		}
		// 获取登录的状态
		System.out.println(subject.isAuthenticated());
	}

认证流程总结

login方法
DelegatingSubject中的login方法

在此方法中我们看到是 SecurityManager来管理认证操作的 继续进入

进入DefaultSecurityManager的login方法

此方法中调用Authenticator认证

AbstractAuthenticator认证
ModularRealmAuthenticator

在该方法中获取ini文件中的信息,加载解析不是在次方法中。

AuthenticatingRealm

流程描述

  1. 创建token令牌,token中有用户提交的认证信息即账号和密码
  2. 执行subject.login(token),最终由securityManager通过Authenticator进行认证
  3. Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带)
  4. IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java帮帮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WMCTF2021-Flag Thief WP
e01镜像是目前取证中最常用的镜像格式,在制作过程中进行校验与压缩,兼具了速度与完整性两方面,对于e01镜像仿真最简单的方式就是直接将其作为物理盘挂载到本地,可以用工具 AccessData FTK Imager,挂载后我们简单翻一翻文件内容,可以看到安装了 VMware Tools,在路径
回天
2023/04/25
9110
WMCTF2021-Flag Thief WP
长安杯2021赛题复现详解
2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊, 下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警 方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包--zhibo.apk(检材一),请各位回答下列问题:(题目 中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例: 192.168.100.100-CAB2021)
回天
2023/04/25
2.6K0
长安杯2021赛题复现详解
长安杯2022赛题复现详解
【不咕鸟】三战长安杯,有幸在本科阶段的最后一次长安杯取得了一个新的突破,比起第一年的全国第三,也算是善始善终啦。
回天
2023/04/25
2.3K0
长安杯2022赛题复现详解
android渗透测试学习笔记
attify/lot exploitation/penetration testing Drozer Exploit-Me漏洞
tea9
2022/07/16
8840
*CTF2021 Misc部分wp
下载得到一个没有后缀的文件,010查看可以发现是vhdx文件,改后缀为vhdx,尝试挂载,发现被bitlocker加密
回天
2023/04/25
6670
*CTF2021 Misc部分wp
第六届蓝帽杯初赛
今天打了一天这个比赛,也是第一次接触取证题发现还可以接受,这个比赛拿了个稍微好点的成绩,但是身为web手两个web题都没写出来,说来有点惭愧,也进了半决赛,再接再厉吧
故里[TRUE]
2023/04/19
3930
第六届蓝帽杯初赛
DASCTF_六月赛MISC部分wp
除此之外线索都没给,开局一张图,剩下全靠猜,结果考点是个工具提取盲水印,一点与水印相关信息也不给,就硬猜,感觉给点相关信息会成为一个不错的考点吧……
回天
2023/04/25
4640
DASCTF_六月赛MISC部分wp
网鼎杯2020-白虎组-密码柜
下载附件得到一个vmem文件和一个kdbx文件,百度可知这个kdbx文件是由KeePass这个软件加密得到的
回天
2023/04/25
8060
网鼎杯2020-白虎组-密码柜
Android 渗透测试学习手册 第三章 Android 应用的逆向和审计
在本章中,我们将查看 Android 应用程序或.apk文件,并了解其不同的组件。 我们还将使用工具(如 Apktool,dex2jar 和 jd-gui)来逆向应用程序。 我们将进一步学习如何通过逆向和分析源代码来寻找 Android 应用程序中的各种漏洞。 我们还将使用一些静态分析工具和脚本来查找漏洞并利用它们。
ApacheCN_飞龙
2022/12/01
1.3K0
第三届数据库大赛 ADB 性能挑战赛赛题总结
之前在分享《海量无序数据寻找第 K 大的数》这篇文章时,就已经提到过我参加了阿里云举办的《第三届数据库大赛创新上云性能挑战赛–高性能分析型查询引擎赛道》,传送门:https://tianchi.aliyun.com/competition/entrance/531895/introduction。截止到 8 月 20 日,终于结束了漫长的赛程。作为阿里云员工的我,按照赛题规定,只能参加初赛,不能参加复赛,出于不影响比赛的目的,终于等到了比赛完全结束,才动笔写下了这篇参赛总结。
kirito-moe
2021/09/08
8010
第三届数据库大赛 ADB 性能挑战赛赛题总结
Android应用测试速查表
写在前面 最近研究了下Android应用测试,找了一些资料,觉得OWASP这篇写的还是比较系统的,所以翻译出来给大家分享下。文中的翻译尽可能保持原文格式,但一些地方为了通顺和易于理解也做了一定改动,如
FB客服
2018/02/23
1.8K0
Android应用测试速查表
《吐血整理》高级系列教程-吃透Fiddler抓包教程(28)-Fiddler如何抓取Android7.0以上的Https包-下篇
虽然依旧能抓到大部分Android APP的HTTP/HTTPS包,但是别高兴的太早,有的APP为了防抓包,还做了很多操作: ① 二次加密 有的APP,在涉及到关键数据通信时,会将正文二次加密后才通过HTTPS发送,我们抓包抓到的是一堆二进制base64 ② 自带HTTP Client 像支付宝那样的变态,自己带了一个基于so的HTTP Client库,对于关键数据,都不走URLConnection和OkHttp,而是走自己的HTTP Client库,甚至一些WebView页面的渲染,都是先用自带的HTTP Client请求得到json数据,然后填到HTML模板里面,再在WebView里渲染出来。 ③ SSL/TLS Pinning,APP自带服务端证书,除了自带证书什么都不信
北京-宏哥
2022/10/28
29.4K0
对一个手游修改器锁机APP的分析
于是就进行下载分析(使用或分析这种未知风险的APP,建议都在模拟器上进行操作,因为你不知道这APP是否有危害,在模拟器上运行,如果出问题了,顶多就是删除模拟器然后重新再来,如果再手机上运行,那么这个就可能需要你进行刷机才可解决。),在模拟器上安装完APP,点击启动APP然后就出现了下面的一幕。屏幕被锁了,界面还带有极具讽刺的文字。
小道安全
2022/12/03
1K0
对一个手游修改器锁机APP的分析
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
昨天整了个珍惜逆向的团购,当了一晚上的客服,结果还是很多人错过拍大腿了,算了算了 还是老老实实写文章吧
咸鱼学Python
2022/06/24
5110
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
长安杯2020赛题复现详解
接群众举报,网站“www.kkzjc.com”可能涉嫌非法交易,警方调取了该网站的云服务器镜像(检材1.DD),请对检材1进行分析,获取证据,并根据线索解锁更多检材,深入挖掘出更多与案件有关的信息。
回天
2023/04/25
1.4K1
长安杯2020赛题复现详解
2025年山东省职业院校技能大赛高职组信息安全管理与评估样题
本次大赛,各位选手需要完成三个阶段的任务,每个阶段需要按裁判组专门提供的U盘中的“信息安全管理与评估竞赛答题卡-模块X”提交答案。
小胡同学
2024/12/13
5103
工程师必备APP抓包技能
一台上网电脑就能完成 APP 抓包分析一条龙服务。这是一篇 APP 抓包分析总结性文章,采用 APP 模拟器与 Web 调试代理工具组合玩法。从此 APP 抓包分析能力变得游刃有余,告别脚忙手乱。
全栈程序员站长
2022/09/02
2.1K0
工程师必备APP抓包技能
安恒杯DASCTF——四月春季赛部分wp
可以看到v6的起始是A0h,v5起始是30h,那么两个相减为70h,转为10进制刚好为112
L1near
2022/11/11
8090
安恒杯DASCTF——四月春季赛部分wp
Android + Appium 自动化测试完整的环境配置及代码详解
参考大神博客:https://www.cnblogs.com/fnng/p/4540731.html
全栈程序员站长
2022/09/09
8580
Android + Appium 自动化测试完整的环境配置及代码详解
微软修复Bitlocker驱动器加密工具的绕过漏洞
微软最近修复了Windows Bitlocker驱动器加密中的一个漏洞,这个漏洞可以被用来快速绕过加密功能获取到受害者加密的重要信息。 加密软件中的漏洞 磁盘加密工具是一个重要的保护软件,所有的电子设备都需要依靠它们来保护用户的数据。在它们出现之前,攻击者只需要启动Linux,然后安装存有用户数据的磁盘就可以访问用户的加密文件了。 但是,这些软件也存在着漏洞给黑客们机会。 九月,谷歌Project Zero团队的安全专家James Forshaw在Windows系统上安装的加密软件TrueCrypt发现
FB客服
2018/02/07
1.5K0
微软修复Bitlocker驱动器加密工具的绕过漏洞
推荐阅读
相关推荐
WMCTF2021-Flag Thief WP
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验