1 .Apache Shiro是什么?
Apache Shiro是一个功能强大且灵活的开放源代码安全框架,可以干净地处理认证、授权、企业会话管理和加密。
Apache Shiro的首要目标是易于使用和理解。有时候,安全性可能非常复杂,甚至很痛苦,但并不必一定如此。框架应该尽可能地掩盖复杂性,并公开一个干净而直观的API,以简化开发人员确保其应用程序安全的努力。
这里是一些可以用ApacheShiro处理的事情:
•认证用户以验证其身份
•为用户执行访问控制,例如:
-确定用户是否被分配了某个安全角色
-确定用户是否被允许执行某项操作
•在任意环境中使用Session
API,即使没有Web或EJB容器。
•在认证、访问控制或会话生命周期中响应事件。
•聚集用户安全数据的一个或多个数据源,并将其作为单个复合用户"视图"呈现。
•启用单点登录(SSO)功能
•无需登录即可为用户关联启用"记住我"服务
...
以及更多 - 全部集成到一个内聚易用API中。
Shiro试图为所有应用程序环境实现这些目标 - 从最简单的命令行应用程序到最大的企业应用程序,而不强制依赖于其他第三方框架、容器或应用程序服务器。当然,该项目旨在尽可能融入这些环境中,而且能在任何环境中“开箱即用”。
2 Apache Shiro特性
Apache 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应用。
码字很辛苦,请如对你起到帮助,那就赞个赏呗~^_^