之前一直在用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. mySQL 教程 第5章 插入 更新与删除数据

    使用SQL Manager管理工具连接到schoolDB.由于三张表都设置了主键,因此,以下练习中插入的记录,主键不能重. 插入数据 1. 练习:为表的所有字段插入数据 为表中所有字段插入数据,可以不 ...

  2. hadoop伪分布式环境搭建之linux系统安装教程

    本篇文章是接上一篇<超详细hadoop虚拟机安装教程(附图文步骤)>,上一篇有人问怎么没写hadoop安装.在文章开头就已经说明了,hadoop安装会在后面写到,因为整个系列的文章涉及到每 ...

  3. elastic-job 分布式定时任务框架 在 SpringBoot 中如何使用(一)初始化任务并定时执行

    第一篇需要实现一个最简单的需求:某个任务定时执行,多台机子只让其中一台机子执行任务 一.安装 分布式应用程序协调服务 zookeeper,安装步骤在链接里面 Linux(Centos7)下安装 zoo ...

  4. qt书籍推荐

    <Qt Creator快速入门> 网友霍亚飞写的,他可算是Qt达人吧.这本书写得通俗易懂.与之配套的还有一个叫<Qt及Qt Quick开发实战精解>,属小项目实战,在入门的基础 ...

  5. bzoj1033 杀蚂蚁

    假设游戏中的蚂蚁也是按这个规则选择路线: 1.每一秒钟开始的时候,蚂蚁都在平面中的某个整点上.如果蚂蚁没有扛着蛋糕,它会在该点留下2单位的信息素,否则它会留下5单位的信息素.然后蚂蚁会在正北.正南.正 ...

  6. windows下elasticsearch配置及spring boot 简单demod的 整合

    学习过程: elasticsearch 下载安装 elasticsearch-head 安装 spring boot 下elasticsearch的配置 使用ElasticsearchReposito ...

  7. PAT 乙级 1038 统计同成绩的学生C++版

    1038. 统计同成绩学生(20) 时间限制 250 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求读入N名学生的成绩,将 ...

  8. 关于UC、火狐、谷歌浏览器屏蔽布局中广告的解决办法

     关于UC浏览器屏蔽了广西人才网的名企.品牌.热点的logo,是因为当成广告过滤掉了,以后div的class和id不能以“ad”开头.这可能只是其中一个规则,adxxxx是可以的,不能是adXxxx, ...

  9. javascript中有关this的解析题

    1.作用域链 作用域:浏览器给js一个生存环境(栈)内存 作用域链:js中的关键字var function 都可以提前声明和定义,提前声明和定义,放在我们的内存地址(堆)内存中,然后js从上到下逐行执 ...

  10. Python软件开发规范

    bin  整个程序的执行路口    start.py conf 配置文件     setting.py lib   库  模块与包    common.py    sql.py core  核心逻辑  ...