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. spring事件驱动模型--观察者模式在spring中的应用

    spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用,关于观察者模式在之前的博文中总结过,http://www.cnblogs.com/fingerboy/p/5468994. ...

  2. Apache Derby倒斗之路-01小道消息

    1.DERBY是什么: Apache Derby 是IBM于2004年贡献给Apache软件基金会的数据库,于2005年正式成为开源项目,Derby作为一个基于JAVA的关系型数据库框架,他拥有许多便 ...

  3. Unity渲染优化中文翻译(三)——GPU的优化策略

    如果游戏的渲染瓶颈来自于GPU 首要任务就是找出造成GPU瓶颈的因素所在,通常GPU的性能受到像素分辨率的影响,特别是在移动客户端的游戏,但是内存带宽和顶点计算的影响也需要注意.这些因素的影响都需要实 ...

  4. ubuntu文件目录详细介绍

    /bin 二进制可执行命令 /dev 设备文件(硬盘/光驱等) /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录,下面会有以登录用户名作为文件夹名的各文件 ...

  5. KMP算法的正确性证明及一个小优化

    直接把作业帖上来是不是有点不太公道呀... 无所谓啦反正各位看着开心就行 KMP算法 对于模式串$P$,建立其前缀函数$ N$ ,其中$N [q] $ 表示在$P$中,以$q$位置为结束的可以匹配到前 ...

  6. 49-Group Anagrams-(Medium) 题解

    1.题目 Given an array of strings, group anagrams together. For example, given: ["eat", " ...

  7. [译]AngularJS 1.3.0 开发者指南(一) -- 介绍

    [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? AngularJS是一款针对动态web应用的结构框架. 它可以让像使用模板语言使用HTML, 并且可以扩展 ...

  8. Nginx http 500错误分析及解决方法

      出现场景:   在用nginx做负载均衡服务器对系统做并发测试,并发量比较大时Nginx会报出Http 500错误     报错原因:   访问量大的时候,由于系统资源限制,而不能打开过多的文件 ...

  9. 深度神经网络(DNN)的正则化

    和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结. 1. DNN的L1&L2正则化 想到正则化,我们首先想到的就是L1正则化和L2正 ...

  10. jQuery写选项卡

    <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8" ...