Apache Shiro 1.3.2简介

简介
Apache Shiro是一个功能强大且灵活的开放源代码安全框架,可以清楚地处理认证,授权,企业会话管理和加密。Apache Shiro的首要目标是易于使用和理解。有时候安全性可能非常复杂和痛苦,框架应该尽可能地掩盖复杂性,并对外公开干净且直观的API,以简化开发人员为了确保其应用程序安全的工作。
以下是您可以使用Apache Shiro完成的一些事情:
1.认证用户以证实其身份。
2.为用户执行访问控制,例如确定是否为用户分配了某个安全角色或者确定用户是否允许执行某项操作。
3.在任何环境中使用Session API,即使没有Web或EJB容器,例如JavaSE环境下也可以使用。
4.在认证,访问控制或会话生命周期中响应事件。
5.汇总一个或多个用户安全数据的数据源,并将其作为单个复合用户“视图”呈现。
6.启用单点登录(SSO)功能
7.为用户关联启用'记住我'服务,无需登录
...
等等 - 所有这些都集成到一个紧密结合的易用API中。
Shiro试图为所有应用程序环境实现这些目标 - 从最简单的命令行应用程序到最大的企业应用程序,而不强制依赖于其他第三方框架,容器或应用程序服务器。当然该项目旨在尽可能融入这些环境中,但可以在任何环境中开箱即用。
 
Apache Shiro是一个具有许多功能的综合应用程序安全框架。重点功能点如下图:
Shiro的目标是Shiro开发团队称之为“应用程序安全的四大基石” - 认证,授权,会话管理和加密:
Authentication:有时被称为“登录”,这是证实用户是他们所说的人的行为。
Authorization:访问控制的过程,即确定“谁”有权限做“什么”。
Session Manager:即使在非Web或EJB应用程序中,也可以管理用户特定的会话。
Cryptography:使用加密算法保持数据安全,同时仍然易于使用。
还有其他特性可以在不同的应用环境中支持和加强这些关注点,特别是:
Web Support:Shiro的Web支持API可帮助轻松保护Web应用程序。
Caching:缓存是Apache Shiro API中的第一级公民,可确保安全操作快速高效。
Concurrency:Apache Shiro支持多线程应用程序。
Testing:测试支持的存在是用来帮助您编写单元和集成测试,并确保您的代码和预期一样的安全。
Run As:允许用户假装为其他用户身份(如果允许)的功能,有时在管理场景中很有用。
Remember Me:在会话中记住用户的身份,这样他们只需在强制登录时才需要登录。
 
术语
Authentication
认证是证实Subject(见下文)身份的过程,从本质上证明某人确实是他们所说的人,当尝试认证成功时,应用程序可以相信Subject保证是应用程序期望的。
 
Authorization
授权也称为访问控制,是确定用户-Subject(见下文)是否被允许执行某些操作的过程。通常通过检查和解释Subject的角色和权限(见下文),然后允许或拒绝访问所请求的资源或功能来完成。
 
Cipher
暗号就是执行加密活解密的算法。该算法通常依赖于称为密钥的信息,如果没有密钥,解密是非常困难的。
 
Credential
凭证是一条用于验证用户-Subject(见下文)身份的信息。在尝试认证的期间,一个(或多个)凭证与 Principal(见下文)一起提交,以证实提交它们的用户-Subject(见下文)是实际上的关联的用户。凭证通常是非常秘密的事物,只有特定的用户-Subject(见下文)知道,例如密码或PGP密钥或生物特征属性或类似的机制。
 
Cryptography
密码学是通过隐藏信息或将其转化为无意义的信息的方式来保护信息免受不正当访问的做法,因此没有其他人可以读取它。Shiro专注于密码学的两个核心元素:使用公钥或私钥对如电子邮件等数据进行加密,以及对密码等数据进行不可逆加密的散列(又名消息摘要)。
 
Hash
散列函数是输入源(有时称为消息)的单向、不可逆转换,将其转换为编码的散列值(有时称为消息摘要)。它通常用于密码,数字指纹或带有底层字节数组的数据。
 
Permission
权限,至少在Shiro的解释下,是一个声明,它描述了应用程序中的原始功能,仅此而已。权限是安全策略中的最低级别构造。他们只定义“应用程序可以做什么”。他们没有描述“谁”能够执行这些行为。权限仅仅是一种行为的描述。例如访问某个页面,删除某条记录等。
 
Principal
principal是应用程序用户-Subject(见下文)的任何标识属性,标识属性可以是对应用程序有意义的任何内容 - 用户名,姓,特定名称,社会安全号码,用户ID等等。Shiro还引用了我们称之为Subject(见下文)primary principal的东西,primary principal是整个应用程序中可以唯一标识Subject(见下文)的任何principal。理想的primary principal是像用户名或用户ID这样的东西,它是RDBMS中用户表的主键。应用程序中的用户-Subject(见下文)只有一个primary principal。
 
Realm
realm是一个可以访问特定的应用程序安全数据(如用户,角色和权限)的组件。它可以被认为是特定的安全性DAO(数据访问对象)。Realm将这些特定的应用程序的数据转换为Shiro可以理解的格式,因此无论存在多少数据源或数据如何针对特定应用程序,Shiro都可以提供一种易于理解的Subject编程API。
领域通常与数据源(如关系数据库,LDAP目录,文件系统或其他类似资源)具有1对1关联。因此,Realm接口的实现使用特定于数据源的API来发现授权数据(角色,权限等),例如JDBC,文件IO,Hibernate或JPA或任何其他数据访问API。
 
Role
角色的定义可能因您交谈的对象而有所不同。在许多应用程序中,它是一个模糊的概念,最多人们用它来隐式定义安全策略。Shiro倾向于将角色解释为权限的命名集合。这就是它 - 一个应用程序中唯一的名称,它集合了一个或多个Permission声明。
 
Session
会话是与在一段时间内与软件系统交互的单个用户-Subject(见下文)相关联的有状态的数据上下文。在Subject(见下文)使用应用程序时,可以从Session中添加/读取/删除数据,并且应用程序可以稍后在必要时使用此数据。Session在用户-Subject(见下文)退出应用程序或由于不活动而超时时终止。对于那些熟悉HttpSession的人来说,一个Shiro 会话可以达到同样的目的,但Shiro会话可以在任何环境中使用,即使没有可用的Servlet容器或EJB容器。
 
Subject
Subject只是一个花哨的安全术语,它基本上意味着一个应用程序用户的特定的安全“视图”。然而Subject并不总是需要表示为人类 - 它可以表示调用应用程序的外部进程,也可以表示在一段时间内间歇性执行某些事情的守护进程帐户(例如cron作业)。它基本上表示利用应用程序做某些事情的任何实体。
 
架构
 
 
参考
shiro官网

猜你喜欢

转载自www.cnblogs.com/gjb724332682/p/9090018.html