之前一直在用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的更多相关文章

  1. (一)shiro简介和用户登录demo及角色管理

    一.shiro简介 Apache Shiro是Java的一个安全框架.Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境.Shiro可以帮助我们完成 ...

  2. 第一章 Shiro简介——《跟我学Shiro》(转)

    目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...

  3. C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

    在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架 ...

  4. Shiro简介

    1.简介 Apache Shiro是一个功能强大且易于使用的Java安全框架,进行身份验证,授权,加密和会话管理,可用于保护任何应用程序 - 从命令行应用程序,移动应用程序到大型的Web应用和企业应用 ...

  5. 跟开涛老师学shiro -- shiro简介

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Securi ...

  6. MEF简介及简单的Demo

    MEF简介及简单的Demo 文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架).单从名字我们不难发现:MEF是专门 ...

  7. 第一章:shiro简介

    1.1 简介 Apache Shiro是java的一个安全框架,相当简单,没有Spring Security功能强大,但是实际工作中大多使用shiro就够了.可以帮助我们完成:认证,授权,加密,会话管 ...

  8. 《跟我学Shiro》学习笔记 第一章:Shiro简介

    前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...

  9. Shiro学习总结(1)——Apache Shiro简介

    1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比springSecurity,可能没有Spring Securit ...

随机推荐

  1. Vue 介绍

    1. 条件 效果图. 如果seen为false,文字将消失 2. 循环 script里定义数据 效果 3. 事件处理 效果如下图, hello world被逆转了

  2. golang中如何判断文件是否有可执行权限

    本文介绍在Go语言如何检查文件的权限.以检查文件可执行权限为例. 在文件系统中,文件的属性使用uint32表示. 例如 -rwxrwxrwx 判断可执行权限,也就是检查文件mode是否有: --x-- ...

  3. [模板] KMP字符串匹配标准代码

    之前借鉴了某个模板的代码.我个人认为这份代码写得很好.值得一背. #include<bits/stdc++.h> using namespace std; const int N=1000 ...

  4. 【ActiveMQ入门-8】ActiveMQ学习-与Spring集成

    概述: 下面将介绍如何在Spring下集成ActiveMQ. 消费者:同步接收: 目的地:topic 环境: 主要包括4个文件: HelloSender.java: JMSTest.java: Pro ...

  5. 【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题

    前言 一般来说.NET程序员是不用担心内存分配释放问题的,因为有垃圾收集器(GC)会自动帮你处理.但是GC只能收集那些不再使用的内存(根据对象是否被其它活动的对象所引用)来确定.所以如果代码编写不当的 ...

  6. bzoj2048 书堆

    Description Input 第一行正整数 N M Output 一行(有换行符),L,表示水平延伸最远的整数距离 (不大于答案的最大整数) 贪心地把最高的书尽量向右放可以得到最优解,因而最高的 ...

  7. unittest框架进坑系列_(含selenium数据分离的坑)

    1.测试用例的执行顺序 有默认的顺序的,不是按你自己的排列执行,注意. 进坑原因,没有先执行制造变量的测试用例,导致其他用例无法找到变量值 2.数据分离的坑 在控制层 有函数嵌套,2个函数都必须带se ...

  8. Unity3D NGUI Sprite精灵动画

    NGUI 2.6.1下载: part1 part2 NGUI 实现Sprite精灵动画很简单: 1.先制作图像集合.打开NGUI菜单下Atlas Maker,选中切好的图片,点击Add/Update按 ...

  9. python selenium-6 HTML测试报告

    1.生成HTML测试报告 import unittest,sys from selenium import webdriver from time import sleep class TestBai ...

  10. SIP 认证方式

    SIP认证是继承了HTTP的认证方式.HTTP的认证方案主要有Basic Authentication Scheme和Digest Access Authentication Scheme两种.而Ba ...