Apache Shiro简介

Apache Shiro是一个功能强大,灵活的开源的安全框架,它可以干脆利落的处理身份验证、授权、企业会话管理和加密。
与spring security一样,都是一个作为权限管理的安全框架。但是与spring security相比,在于shiro使用了比较简单、易懂且易于使用的授权方式。

shiro官网:http://shiro.apache.org/

Apache Shiro特征

Apache Shiro是一个全面的、功能丰富的安全框架,如图描述了shiro的一些集中关注点。


其中绿色的四大块分别是认证(Authentication)、授权(Authorization)、会话管理(Session Management)、加密(Cryptography),它们被shiro的开发团队称之为应用程序安全的四大基石:

  • 认证:用户的识别,通常被称为用户登录
  • 授权:做访问控制,比如某个用户是否具有某个操作的使用权限
  • 会话管理:特定于用户的会话管理
  • 加密:对数据源使用加密算法加密保证数据安全,同时保证它容易使用

当然了,还有其他功能来支持和加强这些不同应用环境下安全领域的关注点,特别是对以下功能的支持:

  • 首先是web的支持,shiro提供了web支持API,可以轻松的保护web应用程序的安全,
  • 接下来是缓存,缓存是shiro保证安全操作快速高效的重要手段
  • 并发:shiro支持多线程应用程序的并发特性
  • 测试:支持单元测试和集成测试,确保代码和预想的一样安全
  • 支持run as功能,这个功能允许用户假设另一个用户的身份,当然了,这是在许可的前提下才可以
  • remember me功能,它可以跨session记录用户的身份,只有在强制需要时,才需要登录

这里需要注意,shiro不会去维护用户和权限,需要我们自己去设计和实现,然后提供相应的接口注入给shiro

高级别的概述

在概念层,shiro架构主要包含3个主要理念:subject、securitymanager、realm,下图为这些组件如何交互的高级概述图,我们分别介绍每个概念。

subject

主体,代表了当前用户,subject可以是一个人,也可以是第三方服务,守护进程的账户或者其他当前和软件交互的任何事件比如网络爬虫、机器人等,它是一个抽象的概念。
所有的subject都绑定到securitymanager,与subject所有的交互都会委托给securitymanager,可以把subject认为是一个门面,securitymanager才是一个实际的执行者。

SecurityManager

securitymanager是一个安全的管理器,即所有与安全有关的操作都会与securitymanager交互,它管理着所有的subject,可以看出它是shiro的核心,它负责与后面介绍的其他组件进行交互。

Realm

shiro从realm中获取安全数据,包括用户角色、权限等等,securitymanager要验证身份的话,需要从realm获取相应的用户,然后进行比较,以确定用户身份是否合法,也需要从realm中得到用户相应的角色以及权限进行验证用户是否能进行操作,可以把realm看成datasource,即安全的数据源

最简单的一个shiro应用,首先是应用代码通过subject来进行授权和认证,而subject又委托给securitymanager,我们需要给securitymanager注入realm,从而让securitymanager能够得到合法的用户及其权限进行判断。

Apache Shiro架构

接下来看一下Apache Shiro的架构图

Authenticator

这是用户认证管理器,这个组件主要是用于处理用户的登录逻辑,它通过调用realm的接口来判断登录用户的身份,这里涉及到用户认证策略,比如如果系统中配置了多个realm,则需要使用Authentication Strategy来协调这些realm以便决定一个用户的登录和认证是成功还是失败。

比如一个realm验证成功了,但是其他都失败了,这次认证是算成功还是失败呢,还是说必须所有的realm都成功了才算成功,或者第一个realm成功就算成功,因此我们需要一个策略,这个策略相对还是挺复杂的。

Authorizer

这是权限管理器,这个组件主要是用来做用户的访问控制,通俗来说,就是决定用户能做什么,不能做什么,和Authenticator类似,Authorizer它也知道怎么协调多个realm数据源的数据,它有自己的一套策略

Session Manager

会话管理器,它知道如何创建会话,管理用户会话的生命周期,以便在所有运行环境下都能给用户提供一个健壮的会话管理体验,shiro在任何环境下都可以在本地管理用户会话,即便没有web容器也可以,这在安全管理框架中算是独门绝技了。

当然如果当前环境中有会话管理机制,比如servlet容器,则shiro默认会使用该环境的会话管理机制,而如果像控制台这种独立的应用程序,本身没有会话管理机制的时候,shiro就会使用内部的会话管理器来给应用开发提供一致的编程体验。

Session Dao

它允许用户使用任何类型的数据源来存储session数据,它主要是用来代替Session Manager执行session相关的增删改查,这个接口允许我们将任意种类的数据、存储方式引入到session管理的基础框架之中。

Cache Manager

用于创建和维护一些在其他shiro组件中用到的cache实例,维护这些cache实例的生命周期,缓存用于存储那些从后端获取到的用户验证、及权限控制方面的数据来提高性能。在获取数据时,先是从缓存查找,如果没有,再调用后端接口从其他数据源获取,shiro允许用户使用其他更加现代的企业级数据源来代替内部的默认实现,以提高更高的性能和更好的用户体验。

Cryptography

加密技术,对于一个企业级的安全框架来说,加密算是其固有的一种特性,shiro的Crypto包装包含了一系列的易于理解和使用的加密hash辅助类,所有的类都是经过精心设计,相比于java本身提供的一套反人类的加密组件,shiro的这套加密组件简直好用太多了。

Realm

是连接shiro和安全数据的桥梁,任何时候当shiro需要执行登录或者访问控制的时候,都需要调用已经配置的realm接口去获取数据,一个应用程序可以配置一个或者多个realm,通常来说一个数据源会配置一个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268