(1)shiro简介和第一个demo
之前一直在用shiro开发,不过只是会使用,并没有深入了解,最近有时间学习了一下,把最近学习所得分享一下。
shiro简介
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序,
相比于spring security更加的简洁和使用方便了。
三个核心组件
组件看不懂可以先把demo跑起来,然后回头再看,慢慢的体会就明白了。
Subject:代表了当前访问系统的用户,不一定是人,也可以是爬虫等其他东西。
SecurityManager:安全管理器,是shiro框架的核心。管理者subject,session等。
Realms:可以看成是一个权限的数据源,用户登录认证和授权都是通过realm来进行的,可以设置多个realm。
第一个demo
添加pom文件
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
在classpath下新增一个shiro.ini文件。文件内容如下:(意思就是在这个系统中存在zhang这个用户,密码是123,后期会用存储在数据库中的账户密码,这里方便测试和讲解。。)
[users]
zhang=123
测试代码:
Factory<SecurityManager> factory =new IniSecurityManagerFactory("classpath:shiro.ini");
//得到安全管理器
SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123"); try {
subject.login(token);
} catch (AuthenticationException e) {
e.printStackTrace();
}
System.out.println(subject.isAuthenticated());
subject.logout(); System.out.println(subject.isAuthenticated());
最后输出
true
false。
1首先通过IniSecurityManagerFactory和shiro.ini文件生成一个SecurityManager工厂。
2获得该工厂的实例并托管给SecurityUtils这个类,其实就是放在了SecurityUtils这个类的一个static变量中,下面操作的底层还是SecurityManager里面的方法。
3通过SecurityUtils得到一个主体对象,此时这个对象里面是没有数据的,也没有通过认证和授权,在SecurityUtils.getSubject获取的同时将当这个subject绑定到了当前线程里面。(如果你再getSubject也是该subject)
4创建一个token绑定用户名和密码。然后调用subject.login进行登录(其实就是调用了SecurityManager进行认证和授权)
shiro核心架构图:
Authentication:身份认证,通常用于校验密码等操作。
Authorization:授权,权限验证,校验用户是否拥有某种角色,或者某种更细的资源。
创建SecurityManager步骤
我们创建Security对象在java环境下创建了DefalutSecurityManager,它默认继承了AuthenticatingSecurityManager(认证器管理器),AuthorizingSecurityManager(授权器管理器)。
这两个管理器分别持有Authenticator(认证器)和Authorizer(授权器)两个变量。(这里只贴图一张,还有一个可以看看源码)
这两个在java环境下的实现类分别是,ModularRealmAuthenticator(默认认证器)和ModularRealmAuthorizer(默认授权器)
并且在读取shiro.ini文件后默认创建了IniRealm对象,注入到上面的认证器和授权器中。(授权器也有个realms对象,realms存放着账号密码,对应的权限等信息)
最后创建了一个SecurityManager对象。
在调用subject.login(token);方法时候。会最终调用这个安全管理器的认证器对应的方法。
登录的时候如果账号密码异常,会抛出对应的异常。(这里还绑定了session,shiro的session和web中的session是两个概念,后面介绍)
到这里这个zhang的subject就登录成功了。
github地址
https://github.com/cmniefei/shiroparent
(1)shiro简介和第一个demo的更多相关文章
- (一)shiro简介和用户登录demo及角色管理
一.shiro简介 Apache Shiro是Java的一个安全框架.Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境.Shiro可以帮助我们完成 ...
- 第一章 Shiro简介——《跟我学Shiro》(转)
目录贴:跟我学Shiro目录贴 1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...
- C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...
- Shiro简介
1.简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,进行身份验证,授权,加密和会话管理,可用于保护任何应用程序 - 从命令行应用程序,移动应用程序到大型的Web应用和企业应用 ...
- 跟开涛老师学shiro -- shiro简介
1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...
- MEF简介及简单的Demo
MEF简介及简单的Demo 文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门 ...
- 第一章:shiro简介
1.1 简介 Apache Shiro是java的一个安全框架,相当简单,没有Spring Security功能强大,但是实际工作中大多使用shiro就够了.可以帮助我们完成:认证,授权,加密,会话管 ...
- 《跟我学Shiro》学习笔记 第一章:Shiro简介
前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...
- Shiro学习总结(1)——Apache Shiro简介
1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比springSecurity,可能没有Spring Securit ...
随机推荐
- php设计模式:单例模式
前些日子开始着真正的去了解下设计模式,开始么,简单地从单例模式开始,当然网上看了一些资料,单例模式比较好理解,看看介绍,然后看看代码基本也就能够理解了,设计模式这些的花点心思基本的是能够理解的,当然要 ...
- 安装Linux软件时没有图形界面的问题
Q: 现在Linux下的软件有很多也采用图形界面安装了:但有时候我们发现启动安装程序时本该出现图形界面时却出现了文本界面. A: 检查常用的图形函数库(最主要的自然是gtk, qt)是否已安装.尤其是 ...
- 【Spring学习笔记-MVC-8】SpringMVC之类型转换Converter
作者:ssslinppp 1. 摘要 在spring 中定义了3中类型转换接口,分别为: Converter接口 :使用最简单,最不灵活: ConverterFa ...
- spring boot学习(1) hello world
第一节:SpringBoot 简介 主要是简化开发: 1. 创建独立的Spring应用程序 2. 嵌入的Tomcat,无需部署WAR文件 3. 简化Maven配置 4. 自动配置Spring 5. 提 ...
- SpringMVC中的重定向和转发的实现
1.请求转发和重定向的区别 请求重定向和请求转发都是web开发中资源跳转的方式. 请求转发是服务器内部的跳转 地址栏比发生变化 只有一个请求相应 可以通过request域对跳转目标的请求 请求重定向是 ...
- java程序怎么在一个电脑上只启动一次,只开一个进程
目录 <linux文件锁flock> <NIO文件锁FileLock> <java程序怎么在一个电脑上只启动一次,只开一个进程> 方案1: 单进程程序可以用端口绑定 ...
- HTML5: SVG (可缩放矢量图形)
ylbtech-HTML5: SVG (可缩放矢量图形) 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 1. ...
- class<T>和 class<?>类型 有什么区别
平时看java源代码的时候,如果碰到泛型的话,我想? T K V E这些是经常出现的,但是有时想不起来代表什么意思,今天整理下: ? 表示不确定的java类型. T 表示java类型. K V 分别代 ...
- RouterOS 设定NAT loopback (Hairpin NAT)回流
In the below network topology a web server behind a router is on private IP address space, and the r ...
- IntelliJ IDEA小问题解决方法------(持续更新)
1:IDEA运行时报错提示“找不到或无法加载主类”:在确保IDEA开发环境无误后->file->invalidate Cache/restart,之后再重新build.问题解决. 2.如何 ...