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简介的更多相关文章

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

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

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

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

  3. 第一章 Shiro简介——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2018936 目录贴:跟我学Shiro目录贴 1.1  简介 Apache Shiro是Java ...

  4. 第一章 C++简介

    第一章  C++简介 1.1  C++特点 C++融合了3种不同的编程方式:C语言代表的过程性语言,C++在C语言基础上添加的类代表的面向对象语言,C++模板支持的泛型编程. 1.2  C语言及其编程 ...

  5. python 教程 第一章、 简介

    第一章. 简介 官方介绍: Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使 ...

  6. 学习笔记-[Maven实战]-第一章:Maven简介

    Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...

  7. 《JavaScript高级程序设计》——第一章JavaScript简介

    第一章主要讲了JavaScript的诞生和发展.刚刚接触JavaScript的我,似乎对这些内容并不感兴趣,快速看了一遍就开始去看第二章了. 看完第一章,收获也就是了解到JavaScript由ECMA ...

  8. 第一章 Mysql 简介及安装和配置

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  9. python第一章:简介与安装--小白博客

    Python简介 Python是一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项 ...

  10. 用 WEKA 进行数据挖掘 ——第一章:简介

    1.简介数据挖掘.机器学习这些字眼,在一些人看来,是门槛很高的东西.诚然,如果做算法实现甚至算法优化,确实需要很多背景知识.但事实是,绝大多数数据挖掘工程师,不需要去做算法层面的东西.他们的精力,集中 ...

随机推荐

  1. (转)java二维数组的深度学习(静态与动态)

    转自:http://developer.51cto.com/art/200906/128274.htm,谢谢 初始化: 1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行:2.静态初始化:在 ...

  2. WEB前端性能优化之二——css优化

    1.把样式表置于顶部 现把样式表放到文档的< head />内部似乎会加快页面的下载速度.这是因为把样式表放到< head />内会使页面有步骤的加载显示.HTML规范清 楚指 ...

  3. java.math.BigDecimal()的用法

    Java中简单的浮点数类型float和double是不能进行运算的,不光Java,很多语言都是这样. 我们运行下面程序你将会看到 public class TestMathDecimal { publ ...

  4. 初探 discuz

    测试: vim /etc/hosts       ##ip地址转换 修改windows 的配置文件,写字板打开 vim /usr/local/apache/conf/httpd.conf vim /u ...

  5. java初级开发程序员(第六单元)

    1.for循环结构: 循环结构分为四个部分. >初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0. >循环体:重复执行的代码,即输出“好好学习,天天向上!”. >迭代部分 ...

  6. 【转载】HTTP Cookie学习笔记

    什么是cookie? cookie是什么?是饼干,小甜点? No! No! No! 我今天要总结的cookie并不是你所想的小甜心,我这里要说的cookie是Web开发中的一个重要的"武器& ...

  7. canvas绘图不清晰的解决方案

    现象描述 同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多.结果如下图所示. 上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用ca ...

  8. 每天一个Linux命令(23)--linux 目录结构(一)

    对于每一个Linux 学习者来说,了解 Linux 文件系统的目录结构,是学好Linux 的至关重要的一步,深入了解Linux 文件目录结构的标准和每个目录的详细功能,对于我们用好Linux 系统至关 ...

  9. sql 语句优化

    sql语句性能达不到你的要求,执行效率让你忍无可忍,一般会时下面几种情况. 网速不给力,不稳定. 服务器内存不够,或者SQL 被分配的内存不够. sql语句设计不合理 没有相应的索引,索引不合理 没有 ...

  10. python算法(一)

    python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...