第一章:shiro简介
1.1 简介
Apache Shiro是java的一个安全框架,相当简单,没有Spring Security功能强大,但是实际工作中大多使用shiro就够了。可以帮助我们完成:认证,授权,加密,会话管理,web集成,缓存等,基本功能如下所示。

Authentication:身份认证/登录,验证用户是不是拥有对应的身份
Authorization:权限验证,验证是否拥有某个权限,可以验证的那个用户是否拥有某个角色,用户是否对某个资源具有权限
Session management:会话管理,用户登录就是一次会话,没有关闭浏览器之前,信息都会存到session中
Cryptography:加密,保护数据安全性,如密码加密存到数据库
Web Support:Web支持,可以集成到web环境
Caching:缓存,比如用户登陆后,用户信息和拥有的权限不必每次去查,这样可以提高效率
Concurrency:支持多线程的并发验证,在一个线程中重新开启一个线程,能把权限自动传播过去
Testing:提供测试支持
Run As:允许一个用户假装成另一个用户的身份进行登录
Remember me: 记住我,一次登录之后,下次就不用登陆了
切记:shiro不会去维护用户,维护权限,需要我们自己去设计,通过接口注入到shiro
1.2从应用程序角度来看Shiro如何完成工作

可以看到,应用代码直接交互的对象是Subject,也就是说Shiro对外Api核心就是Subject,每个API的含义:
Subject:主体,代表当前“用户”,不一定是个具体的人,只要与当前应用交互的任何东西都是Subject,如爬虫,机器人,所有的Subject都绑定到SecurityManager,与Subject的所有交互都会委托SecurityManager,可以理解为,Subject是门面,SecurityManager是执行者。
SecurityManager:安全管理器,所有与安全有关的操作都会与SecurityManager交互,他管理者所有的Subject,是Shiro的核心,他负责与后边介绍的其他组件进行交互。
Realm:域,Shrio从Realm获取安全数据(用户,角色,权限),就是说SecurityManager要验证用户身份,从Realm获取相应用户,权限/角色进行比较来确定的,就是安全数据来源。
举例:一个最简单的shiro应用:
1.应用代码通过subject来进行认证和授权,而subject又委托给SecurityManager
2.我们将用户权限信息,注册到realm中,SecurityManager根据realm中的安全信息进行验证
1.3从Shiro内部来看下Shiro的架构

解释每个组建的意义:
Subject:主体,任何与应用进行交互的都是Subject
SecurityManager:具体交互交给SecurityManager进行,管理所有Subject,负责进行认证和授权,会话,缓存的管理。
Authenticator:认证器,可以进行扩展,如果觉得shiro默认的不好,可以传入认证策略去自定义实现
Realm:安全数据来源,可以是一个或者是多个,shiro不管你的用户或者权限是什么,怎么存储的,所以我们一般都要在程序中实现自己的Realm
SessionManager:管理session,抽象了一个自己的session来管理主体和应用之间的交互数据,可以实现自己的分布式会话
SessionDAO:数据访问对象,用于会话的CRUD(增删改查),可以通过实现SessionDAO把session放到想要放的位置,如数据库或者是Memcached,SessionDAO中可以使用Cache进行缓存,以提高性能
CacheManager:缓存控制器,来管理用户,角色,权限等的缓存,以提高性能
Cryptography:加解密模块,加入了一些常见的加密组件用户密码解密/解密
第一章:shiro简介的更多相关文章
- 《跟我学Shiro》学习笔记 第一章:Shiro简介
前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...
- 第一章 Shiro简介——《跟我学Shiro》(转)
目录贴:跟我学Shiro目录贴 1.1 简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可 ...
- 第一章 Shiro简介——《跟我学Shiro》
转发地址:https://www.iteye.com/blog/jinnianshilongnian-2018936 目录贴:跟我学Shiro目录贴 1.1 简介 Apache Shiro是Java ...
- 第一章 C++简介
第一章 C++简介 1.1 C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2 C语言及其编程 ...
- python 教程 第一章、 简介
第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...
- 学习笔记-[Maven实战]-第一章:Maven简介
Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...
- 《JavaScript高级程序设计》——第一章JavaScript简介
第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...
- 第一章 Mysql 简介及安装和配置
Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...
- python第一章:简介与安装--小白博客
Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...
- 用 WEKA 进行数据挖掘 ——第一章:简介
1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中 ...
随机推荐
- Windows环境下安装配置Teamcity配合git自动发布mvc,webapi站点
以下是本人配置Teamcity具体环境和步骤,只实现了项目发布,打包.Nodejs npm gulp没有配置成功,后期补上. 1 环境安装 本人使用的是windows7 sp1 64位系统,(.net ...
- node将excel内容转json
小颖分享的这个方法,前提是你已经安装了node,如果大家不知道自己是否安装过node可以打开cmd,然后执行:node -v,如果安装过,你会看到你安装的node版本号,如果没有安装请先安装node. ...
- JAVA设计模式:装饰模式
前面我们学习了代理模式: 代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你 ...
- groovy hello world
安装方法见官方文档http://groovy.codehaus.org/Installing+Groovy 用新一个文件HelloWorld.groovy,以utf8的编码保存,内容为: printl ...
- HAProxy实战
实验目的 测试基于haproxy的反代和负载均衡配置 测试keepalived高可用haproxy的效果 实验要点 (1) 动静分离discuzx,动静都要基于负载均衡实现: (2) 进一步测试在ha ...
- 【PHP系列】PHP推荐标准之PSR-1,PSR-2
说起码代码,刚上大学那会,老师就教导我们,要严格,规范的,把代码写好.代码如人,工工整整.提起规范化的代码,从一开始用命令行编辑C语言代码就开始控制,强制自己按照相关的标准来,所以,现在写代码,不规范 ...
- sql decimal & float & celling 介绍
decimal 可以用在指定几个位数比如 123.456, decimal(3,3), 用这类型计算比较准确. 默认情况下,将数字转换为较低精度和小数位数的 decimal 或 numeric 值时, ...
- 用phpcms如何将静态页面制作成企业网站(下)
上篇讲到了子页部分 这样的 有分页选择 列表项的代码部分 最后输出变量pages就可以了 看一下运行的效果 点击下一页 再来改一下子页显示的样式 点击人才将会出来的一个子页面 路径要统一 再来更改后台 ...
- 一个chrome图片下载插件的开发过程
最近在做采集,发现用chrome的插件来下载整站也是一个不错的思路,所以想开发一个下载网页(仿站)的插件,学习过程如下: 首先查看一些文档资料 学习360翻译的开发文档:http://open.se. ...
- Angular控制器
这里使用的是angular-1.0.1.min.js Angular的前端渲染 <div> <ul> <li ng-repeat="i in [1,2,3]&q ...