Shiro
Shiro 把 Shiro 开发团队称为“应用程序的四大基石” ——身份验证,授权,会话管理和加密作为其目标。
Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。
Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。
Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography:通过使用加密算法保持数据安全同时易于使用
也提供了额外的功能来支持和加强在不同环境下所关注的方面,尤其是以下这些:
Web Support: Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。
Caching:缓存是 Apache Shiro 中的第一层公民,来确保安全操作快速而又高效。
Concurrency: Apache Shiro 利用它的并发特性来支持多线程应用程序。
Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。
"Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
"Remember Me":在会话中记住用户的身份,所以他们只需要在强制时候登录。
Shiro 的架构有 3 个主要的概念: Subject, SecurityManager 和 Realms。
Subject:在我们的教程中已经提到, Subject 实质上是一个当前执行用户的特定的安全“视图”。鉴于"User"
一词通常意味着一个人,而一个 Subject 可以是一个人,但它还可以代表第三方服务, daemon account, cron job,
或其他类似的任何东西——基本上是当前正与软件进行交互的任何东西。
所有 Subject 实例都被绑定到(且这是必须的)一个 SecurityManager 上。当你与一个 Subject 交互时,那些交
互作用转化为与 SecurityManager 交互的特定 subject 的交互作用。
SecurityManager: SecurityManager 是 Shiro 架构的心脏,并作为一种“保护伞”对象来协调内部的安全组件
共同构成一个对象图。然而,一旦 SecurityManager 和它的内置对象图已经配置给一个应用程序,那么它单独
留下来,且应用程序开发人员几乎使用他们所有的时间来处理 Subject API。
我们稍后会更详细地讨论 SecurityManager,但重要的是要认识到,当你正与一个 Subject 进行交互时,实质上
是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。这反映在上面的基本流程图。
Realms: Realms 担当 Shiro 和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相
关的数据如用来执行身份验证(登录)及授权(访问控制)的用户帐户交互时, Shiro 从一个或多个为应用程
序配置的 Realm 中寻找许多这样的东西。
在这个意义上说, Realm 本质上是一个特定安全的 DAO:它封装了数据源的连接详细信息,使 Shiro 所需的相
关的数据可用。当配置 Shiro 时,你必须指定至少一个 Realm 用来进行身份验证和/或授权。 SecurityManager
可能配置多个 Realms,但至少有一个是必须的。
Shiro 提供了立即可用的 Realms 来连接一些安全数据源(即目录),如 LDAP,关系数据库(JDBC),文本配
置源,像 INI 及属性文件,以及更多。你可以插入你自己的 Realm 实现来代表自定义的数据源,如果默认地
Realm 不符合你的需求。