Apache Shiro 安全框架简介

1 .Apache Shiro是什么?

Apache Shiro是一个功能强大且灵活的开放源代码安全框架,可以干净地处理认证、授权、企业会话管理和加密。

Apache Shiro的首要目标是易于使用和理解。有时候,安全性可能非常复杂,甚至很痛苦,但并不必一定如此。框架应该尽可能地掩盖复杂性,并公开一个干净而直观的API,以简化开发人员确保其应用程序安全的努力。

这里是一些可以用ApacheShiro处理的事情:

•认证用户以验证其身份

•为用户执行访问控制,例如:

   -确定用户是否被分配了某个安全角色

   -确定用户是否被允许执行某项操作

•在任意环境中使用Session

API,即使没有Web或EJB容器。

•在认证、访问控制或会话生命周期中响应事件。

•聚集用户安全数据的一个或多个数据源,并将其作为单个复合用户"视图"呈现。

•启用单点登录(SSO)功能

•无需登录即可为用户关联启用"记住我"服务

...

 以及更多 - 全部集成到一个内聚易用API中。

Shiro试图为所有应用程序环境实现这些目标 - 从最简单的命令行应用程序到最大的企业应用程序,而不强制依赖于其他第三方框架、容器或应用程序服务器。当然,该项目旨在尽可能融入这些环境中,而且能在任何环境中“开箱即用”。

2 Apache Shiro特性

Apache Shiro是一个具有许多特性的综合应用程序安全框架。下图显示了Shiro集中精力的地方,与本参考手册的组织方式相似:


Shiro架构组成


Shiro的目标是Shiro开发团队称之为"应用程序安全的四大基石" - 认证,授权,会话管理和加密:

•身份认证(Authentication):有时称为"登录",这是证明用户的行为是他们自称的人。

•访问授权(Authorization):访问控制的过程,即确定"谁"访问"什么"。

•会话管理(Session

Management):即使在非Web或EJB应用程序中,也可以管理用户特定的会话。

•加密(Cryptography):使用加密算法确保数据安全,同时易于使用。

还有其他功能可以在不同的应用环境中支持和强化这些问题,特别是:

•Web支持:Shiro的Web支持API可帮助轻松保护Web应用程序安全。

•缓存(Caching):缓存是Apache

Shiro API中的第一级公民,可确保安全操作快速高效。

•并发性:Apache

Shiro支持具有并发功能的多线程应用程序。

•测试:测试支持的存在,帮助您编写单元测试和集成测试,并确保您的代码按预期得到保护。

•"运行方式":允许用户假设其他用户身份(如果允许)的功能,有时在管理方案中很有用。

•"记住我":在跨会话中记住用户的身份,以便在强制时只需登录即可。

3.Apache Shiro术语

请花2分钟时间阅读并理解这一点- 这非常重要。真的。这里的术语和概念在文档中随处可见,它将大大简化您对Shiro和一般安全性的理解。

由于术语的使用,安全性可能非常困惑人。通过阐明一些核心概念,我们将使生活更轻松,并且您会看到Shiro API是多么好的体现它们的

•身份验证(-Authentication,认证)

认证是验证主体身份的过程- 从本质上证明某人确实是他们所说的人。当认证尝试成功时,应用程序可以相信该主体保证是应用程序所期望的。

•授权(Authorization

授权也称为访问控制,是确定用户/主体是否被允许执行某些操作的过程。通常通过检查和解释主体的角色和权限(见下文),然后允许或拒绝访问所请求的资源或功能来完成。

•密码(Cipher

密码是用于执行加密或解密的算法。该算法通常依赖于称为密钥的信息。并且加密因密钥而异,所以如果没有它,解密是非常困难的。

密码有不同的变化。分组密码对通常具有固定大小的符号块进行处理,而流密码对连续的符号流进行处理。对称密码使用相同的密钥进行加密和解密,而非对称密码使用不同的密钥。如果不对称密码中的密钥不能从其他密钥中派生出来,则可以公开共享创建的公钥/私钥对。

•凭证(Credential

凭证是验证用户/主体身份的一条信息。在验证尝试期间,一个(或多个)凭证与委托人一起提交,以验证提交它们的用户/主题实际上是关联用户。凭证通常是非常秘密的事物,只有特定的用户/主体会知道,例如密码或PGP密钥或生物特征属性或类似的机制。

这理念是,对于委托人而言,只有一个人会知道与该委托人"配对"的正确凭证。如果当前用户/主题提供与存储在系统中的正确凭证匹配的正确凭证,则系统可以假设并相信当前用户/主题真的是他们所说的那个人。随着更安全的凭证类型(例如生物特征签名>密码),信任程度会增加。

•密码学(Cryptography

密码学是通过隐藏信息或将其转化为无意义的方式来保护信息免受不当访问的做法,因此没有其他人可以阅读。  Shiro专注于加密技术的两个核心元素:使用公钥或私钥对电子邮件等数据进行加密的密码,以及对密码等数据进行不可逆加密的哈希散列(又名消息摘要)。

•哈希(Hash

散列函数是输入源(有时称为消息)的单向,不可逆转换,它被编码为散列值,有时也称为消息摘要。它通常用于密码、数字指纹或带有底层字节数组的数据。

•权限(Permission

权限,至少在Shiro的解释下,是一种描述应用程序中原始功能的声明,仅此而已。权限是安全策略中的最低级别构造。他们只定义"应用程序可以做什么"。他们没有描述"谁"能够执行这些行动。权限仅仅是一种行为陈述,仅此而已。

权限的一些示例:

  -打开一个文件

  -查看'/ user /

list'网页

  -打印文件

  -删除'jsmith'用户等等

•主题(Principal

主题是应用程序用户(主体)的任何标识属性。  "标识属性"可以是对您的应用程序有意义的任何内容 - 用户名,姓,特定名称,社会安全号码,用户ID等等。就是这样 - 没有什么疯狂的。

Shiro还引用了我们称之为主体的首要的东西。首要的主题是在整个应用程序中唯一标识主体的任何主题。理想的主题原则是像用户名或用户标识这样的东西,它是一个RDBMS用户表主键。在应用程序中,用户(主体)只有一个主要的主题。

•领域(Realm

Realm是一个可以访问特定应用程序的安全数据(例如用户、角色和权限)的组件。它可以被认为是特定安全性的DAO(数据访问对象)。  Realm将这些特定于应用程序的数据转换为Shiro可以理解的格式,因此无论存在多少数据源或数据如何针对特定应用程序,Shiro都可以提供单一易于理解的Subject编程API。

Realm通常与数据源(如关系数据库,LDAP目录,文件系统或其他类似资源)具有1对1关联。因此,Realm接口的实现使用特定于数据源的API来发现授权数据(角色,权限等),例如JDBC、文件IO、Hibernate或JPA或任何其他数据访问API。

•角色(Role

角色的定义可能因您与谁交谈而有所不同。在许多应用程序中,人们用隐式定义安全策略至多是个模糊的概念。  Shiro倾向于将角色解释为权限的命名集合。这就这样——一个应用程序唯一名称,它聚集了一个或多个Permission声明。

这是比许多应用程序使用的隐式定义更具体的定义。如果你选择让你的数据模型反映Shiro的假设,你会发现你将在控制安全策略方面拥有更多的权力。

•会话(Session

会话是一个有状态的数据上下文,随单个用户/主体在一段时间内与软件系统进行交互。在主体使用应用程序时,可以从Session中添加/读取/删除数据,并且应用程序可以稍后在必要时使用此数据。会话在用户/主体退出应用程序或由于不活动而超时时终止。

对于那些熟悉HttpSession的人来说,一个Shiro会话可以达到同样的目的,但Shiro会话可以在任何环境中使用,即使没有可用的Servlet容器或EJB容器。

主体(Subject

主体只是一个奇特的安全术语,基本上意味着应用程序用户的特定于安全性的"视图"。 然而,主体并不总是需要反映人类 - 它可以表示调用应用程序的外部进程,也可以表示在一段时间内间歇性执行某些事情的守护进程系统帐户(例如cron作业)。 它基本上是对应用程序做任何事情的任何实体的表示。——或者理解为程序的交互对象,包括而不限于用户。



敬请期待,下一篇将讲解创建第一个Shiro应用。

码字很辛苦,请如对你起到帮助,那就呗~^_^

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

推荐阅读更多精彩内容