【Shiro】 简介

Metadata

title: 【Shiro】 简介
date: 2023-01-19 13:20
tags:
  - 行动阶段/完成
  - 主题场景/组件
  - 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
  - 细化主题/Module/Shiro/基础
categories:
  - Shiro
keywords:
  - Shiro
description: Apache Shiro™是一个功能强大且易于使用的Java安全框架,可执行身份验证、授权、加密和会话管理。

【Shiro】 简介

Apache Shiro™是一个功能强大且易于使用的Java安全框架,可执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大的web和企业应用程序。

概括

Apache Shiro 是一个功能齐全、健壮且通用的 Java 安全框架,您可以使用它来保护您的应用程序。通过简化应用程序安全的四个领域,即身份验证、授权、会话管理和密码学,应用程序安全性在实际应用程序中更容易理解和实现。Shiro 的简单架构和 JavaBeans 兼容性使其几乎可以在任何环境中配置和使用。额外的 Web 支持和辅助功能(如多线程和测试支持)完善了框架,为您的应用程序安全提供“一站式服务”。Apache Shiro 的开发团队继续前进,完善代码库并支持社区。随着持续的开源和商业采用,Shiro 有望变得更强大。

什么是 Apache Shiro?

Apache Shiro(发音为“shee-roh”,日语中“城堡”的意思)是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理,可用于保护任何应用程序 -从命令行应用程序、移动应用程序到最大的 Web 和企业应用程序。

Shiro 提供应用程序安全 API 来执行以下方面(我喜欢将它们称为应用程序安全的 4 个基石):

  • 身份验证 - 证明用户身份,通常称为用户“登录”。
  • 授权-访问控制
  • 密码学 - 保护或隐藏数据免遭窥探
  • 会话管理 - 每个用户的时间敏感状态

Shiro 还支持一些辅助功能,例如 Web 应用程序安全性、单元测试和多线程支持,但这些功能的存在是为了加强上述四个主要问题。

为什么要创建 Apache Shiro?

对于一个真正为它的存在提供良好案例并因此成为您使用它的理由的框架,它应该满足其他替代方案无法满足的需求。要理解这一点,我们需要看看 Shiro 的历史以及它创建时的备选方案。

在 2008 年进入 Apache 软件基金会之前,Shiro 已经有 5 年历史,之前被称为 JSecurity 项目,该项目于 2003 年初启动。在 2003 年,Java 应用程序开发人员的通用安全替代品并不多——我们很漂亮Java 身份验证和授权服务,也称为 JAAS。JAAS 有很多缺点——虽然它的身份验证功能在某种程度上是可以容忍的,但授权方面却很迟钝且使用起来令人沮丧。此外,JAAS 与虚拟机级别的安全问题密切相关,例如,确定是否应允许在 JVM 中加载类。作为应用程序开发人员,我更关心应用程序最终用户可以做什么,而不是我的代码可以在 JVM 中做什么。

由于我当时使用的应用程序,我还需要访问一个干净的、与容器无关的会话机制。当时游戏中唯一的会话选择是 HttpSessions,它需要一个 Web 容器,或者 EBJ 2.1 Stateful Session Beans,它需要一个 EJB 容器。我需要一些可以与容器分离的东西,可以在我选择的任何环境中使用。

最后,还有密码学问题。有时我们都需要保证数据安全,但除非您是加密专家,否则 Java 密码体系结构很难理解。该 API 充满了已检查的异常,使用起来感觉很麻烦。我希望有一个更简洁的开箱即用解决方案,可以根据需要轻松加密和解密数据。

因此,看看 2003 年初的安全形势,您很快就会意识到,没有什么可以在一个单一的、有凝聚力的框架中满足所有这些要求。因此,JSecurity 以及后来的 Apache Shiro 诞生了。

你今天为什么要使用 Apache Shiro?

自 2003 年以来,框架格局发生了很大变化,因此今天仍然有令人信服的理由使用 Shiro。实际上有很多原因:

  • 易于使用- 易于使用是该项目的最终目标。应用程序安全性可能非常令人困惑和沮丧,并被认为是“必要之恶”。如果您让它易于使用,新手程序员也可以开始使用它,那么它就不会再痛苦了。
  • 全面- 没有其他安全框架具有 Apache Shiro 声称的范围广度,因此它可能是满足您安全需求的“一站式服务”。
  • 灵活——Apache Shiro 可以在任何应用程序环境中工作。虽然它在 Web、EJB 和 IoC 环境中工作,但并不需要它们。Shiro 也不要求任何规范,甚至没有很多依赖项。
  • Web Capable - Apache Shiro 具有出色的 Web 应用程序支持,允许您根据应用程序 URL 和 Web 协议(例如 REST)创建灵活的安全策略,同时还提供一组 JSP 库来控制页面输出。
  • 可插入- Shiro 简洁的 API 和设计模式使其易于与许多其他框架和应用程序集成。您将看到 Shiro 与 Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 等框架无缝集成。
  • 支持- Apache Shiro 是 Apache Software Foundation 的一部分,Apache Software Foundation是一个被证明以其社区的最佳利益行事的组织。项目开发和用户组有友好的公民随时准备提供帮助。如果需要,像Katasoft这样的商业公司也会提供专业的支持和服务。

谁在使用 Shiro?

Shiro 及其前身 JSecurity 已在各种规模和跨行业的公司的项目中使用多年。自成为 Apache 软件基金会顶级项目以来,网站流量和采用率持续显着增长。许多开源社区也在使用 Shiro,例如 Spring、Grails、Wicket、Tapestry、Tynamo、Mule 和 Vaadin,仅举几例。

Katasoft、Sonatype、主要社交网络之一的 MuleSoft 等商业公司以及纽约的多家商业银行都使用 Shiro 来保护其商业软件和网站。

附加功能

Apache Shiro 框架中还有其他功能可用于保护 Java 应用程序,例如:

  • 线程和并发支持,用于跨线程维护主题(Executor 和 ExecutorService 支持)
  • Callable 和 Runnable 支持将逻辑作为特定主题执行
  • “运行方式”支持假设另一个主题的身份(例如在管理应用程序中有用)
  • 测试工具支持,使得在单元测试和集成测试中对 Shiro 安全代码进行全面测试变得非常容易

框架限制

正如我们所希望的那样,Apache Shiro 并不是一颗“灵丹妙药”——它不会毫不费力地解决所有安全问题。有些事情 Shiro 没有解决,但可能值得了解:

  • 虚拟机级别的问题:Apache Shiro 目前不处理虚拟机级别的安全性,例如根据访问控制策略防止某些类加载到类加载器中的能力。然而,Shiro 可以与现有的 JVM 安全操作集成并不是不可想象的——只是没有人为该项目贡献过这样的工作。
  • 多阶段身份验证:Shiro 目前不支持“多阶段”身份验证,用户可能通过一种机制登录,然后被要求使用不同的机制再次登录。这已经在基于 Shiro 的应用程序中完成,但是通过应用程序预先收集所有必需的信息然后与 Shiro 交互。很有可能在未来的 Shiro 版本中支持此功能。
  • 领域写入操作:目前所有领域实现都支持“读取”操作,用于获取身份验证和授权数据以执行登录和访问控制。不支持“写入”操作,例如创建用户帐户、组和角色,或将用户与角色组和权限相关联。这是因为支持这些操作的数据模型在应用程序之间差异很大,并且很难对所有 Shiro 用户强制执行“写入”API。

即将推出的功能

Apache Shiro 的社区每天都在持续增长,Shiro 的功能也随之增长。在即将推出的版本中,您可能会看到:

  • 更清洁的 Web 过滤器机制,无需子类化即可提供更多可插拔过滤支持。
  • 更多可插入的默认 Realm 实现有利于组合而不是继承。您将能够插入查找身份验证和授权数据的组件,而不是要求您子类化 Shiro Realm 实现
  • 强大的OpenID和OAuth(可能还有混合)客户端支持
  • 验证码支持
  • 更容易配置 100% 无状态应用程序(例如许多 REST 环境)。
  • 通过请求/响应协议进行多阶段身份验证。
  • 通过 AuthorizationRequest 进行粗粒度授权。
  • 用于安全断言查询的ANTLR语法(例如(’role(admin) && (guest || !group(developer))’)