Apache Shiro (一)- 概念篇

1、Shiro 是什么?

ApacheShiro 是一个功能强大且易于使用的 Java 安全框架,它执行身份验证、授权、加密和会话管理,并可用于保护任何应用程序-从命令行应用程序、移动应用程序到最大 Web 和企业应用程序

2、背景

对于一个框架来说,要真正为它应该满足其他替代方案无法满足的需求。要理解这一点,就需要看看 Shiro 的历史和它创建时的替代方案,下面我们谈谈 Shiro 的历史背景:

(1)、在 2008 年加入 AcpacheSoftwareFoundation 之前, Shiro 已经5岁了,以前被称为 JSecurity 项目,该项目始于 2003 年初。在 2003 年,对于 Java 应用程序开发人员来说,并没有很多通用的安全选择,几乎只能使用 Java 身份验证和授权服务(也称为 JAAS)。 JAAS有很多缺点:尽管它的身份验证功能是可以容忍的,但授权方面却很乏味,而且使用起来令人沮丧。另外,JAAS与虚拟机级的安全问题密切相关,例如:确定是否允许在 JVM 中加载类。作为一个应用程序开发人员,我更关心的是应用程序最终关心用户做什么,而不是我的代码在 JVM 中可以做什么。
(2)、 还有 密码学问题。有时,我们都需要确保数据安全,但除非你是密码专家,否则 Java 密码体系结构很难理解API 中充满了检查过的异常,使用起来很麻烦。所以,我们希望有一个更干净的解决方案,以便在必要时方便地加密和解密数据。
(3)、因此,从 2003 年初的安全前景来看,您可以很快意识到,在一个单一的、具有凝聚力的框架中,没有任何东西能够满足所有这些需求。正因为如此,JSecurity ,以及后来的 ApacheShiro 诞生了。

3、三大核心概念

Subject, SecurityManager 和 Realm

  • Subject:即“当前操作用户”。但是,在 Shiro 中,Subject 这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是 Shiro 的“用户”概念。Subject 代表了当前用户的安全操作,SecurityManager 则管理所有用户的安全操作。
  • SecurityManager:它是 Shiro 框架的核心,典型的 Facade 模式,Shiro 通过 SecurityManager 来管理内部组件实例,并通过它来提供安全管理的各种服务。当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。
  • Realm:Realm 充当了 Shiro 与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro 会从应用配置的Realm中查找用户及其权限信息。从这个意义上讲,Realm 实质上是一个安全相关的 DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给 Shiro。当配置 Shiro 时,你必须至少指定一个 Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。Shiro 内置了可以连接大量安全数据源(又名目录)的 Realm,如 LDAP、关系数据库(JDBC)、类似 INI 的文本配置资源以及属性文件等。如果默认的 Realm 不能满足需求,你还可以插入代表自定义数据源的自己的 Realm 实现。

4、Shiro 有什么用?

Shiro 的架构如下:
Apache Shiro (一)- 概念篇_第1张图片
SecurityManager: 它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理
Realm: 它是数据访问的接口,用来获取鉴权、授权相关的数据(帐号、密码、权限、角色等)
Authenticator: 认证器,负责 Subject 认证的,即确定用户是否登录成功
Authorizer: 授权器,即权限授权,给 Subject 分配权限,以此控制可访问的资源
SessionManager: 它可以帮助在不同的环境下使用 session 功能,比如非 web 环境下和分布式环境下等
SessionDAO: 对 session 的 CURD 操作
CacheManager: 缓存控制器,来管理如用户、角色、权限等的缓存的
Cryptography: 密码模块,用于加密解密
Permission/Role: 权限是描述功能的一种声明;角色代表权限的集合
AuthenticationToken/AuthenticationInfo/AuthorizationInfo/SecurityUtils: Others.

5、为什么要使用 Shiro ?

  1. 易用性(Easy To Use):易用性是项目的最终目标。应用程序安全性可能非常混乱和令人沮丧,并被认为是“必要之恶”。如果我们使它易于使用,以至于新手程序员可以开始使用它,那么它就不必再痛苦了。
  2. 全面性(Comprehensive):Apache Shiro 声称没有其他具有如此广泛范围的安全框架,它是”一站式服务“因此它有可能满足的您的各种各样需要。
  3. 灵活(Flexble):ApacheShiro 可以在任何应用程序环境中工作。虽然它在 Web 、EJB 和 IOC 环境中 工作,但也不依赖它们。Shiro 也不要求任何规范,甚至没有许多依赖项。
  4. Web 能力(Web Capable):ApacheShiro 提供了极好的 Web 应用程序支持,允许您基于应用程序 URL 和 Web 协议(例如 REST)创建灵活的安全策略,同时还提供了一组 JSP 库来控制页面输出。
  5. 可插入(Pluggable):Shiro 的干净 API 和设计模式使它易于与许多其他框架和应用程序集成。我们看到 Shiro 与 Spring、Grails、Wicket、Tapestry、Mule、ApacheCamel、Vaadin 等框架无缝集成。

你可能感兴趣的:(Apache Shiro (一)- 概念篇)