Apache Shiro 架构

Apache Shiro 的设计目标是通过直观且易于使用来简化应用程序安全性。 Shiro 的核心设计模拟了大多数人如何在与某人(或某物)进行交互的情况下如何考虑应用程序安全性。

软件应用程序通常是根据用户案例设计的。也就是说,您通常会根据用户与软件的交互方式来设计用户界面或服务 API。例如,您可能会说:“如果与我的应用程序进行交互的用户已登录,我将向他们显示一个按钮,他们可以单击以查看其帐户信息。如果他们未登录,我将显示一个注册按钮。 ”

该示例语句表明,编写应用程序主要是为了满足用户需求。即使“用户”是另一个软件系统而不是人类,您仍然可以编写代码以根据当前正在与您的软件进行交互的人员(或内容)来反映行为。

Shiro 在自己的设计中反映了这些概念。通过匹配软件开发人员已经很直观的内容,Apache Shiro 仍然保持直观且易于在几乎任何应用程序中使用。

High-Level Overview

在最高概念级别,Shiro 的体系结构具有 3 个主要概念:SubjectSecurityManagerRealms。下图是这些组件如何交互的高级概述,我们将在下面介绍每个概念:

Subject个实例都绑定到(并需要)SecurityManager。与Subject交互时,这些交互会转换为与SecurityManager的特定于主题的交互。

稍后我们将详细讨论SecurityManager,但重要的是要认识到,当您与Subject进行交互时,实际上是SecurityManager在幕后对所有Subject安全操作而言都是繁重的工作。这反映在上面的基本流程图中。

从这个意义上说,领域本质上是特定于安全性的DAO:它封装了数据源的连接详细信息,并根据需要使关联数据可用于 Shiro。在配置 Shiro 时,您必须至少指定一个领域用于身份验证和/或授权。 SecurityManager可以配置有多个领域,但至少需要一个。

Shiro 提供了开箱即用的领域,可以连接到许多安全数据源(又名目录),例如 LDAP,关系数据库(JDBC),文本配置源(例如 INI 和属性文件)等。如果默认的 Realms 不能满足您的需求,那么您可以插入自己的 Realm 实现以表示自定义数据源。

像其他内部组件一样,Shiro SecurityManagerManagement 如何使用领域来获取要表示为Subject实例的安全性和身份数据。

Detailed Architecture

下图显示了 Shiro 的核心体系结构概念,并简要概述了每个概念:

The SecurityManager

因为 Shiro 的 API 鼓励以Subject为中心的编程方法,所以大多数应用程序开发人员很少(如果有的话)直接与SecurityManager进行交互(但是框架开发人员有时可能会觉得有用)。即使这样,了解SecurityManager的功能仍然很重要,尤其是在为应用程序配置SecurityManager时。

Design

如前所述,应用程序的SecurityManager执行所有应用程序用户的安全操作并 Management 状态。在 Shiro 的默认SecurityManager实现中,这包括:

但这是尝试在单个组件中进行 Management 的许多功能。而且,如果将所有内容归为一个实现类,则使这些事情变得灵活和可自定义将是非常困难的。

为了简化配置并实现灵活的配置/可插拔性,Shiro 的实现在设计上都是高度模块化的-实际上是模块化的,因此 SecurityManager 实现(及其类层次结构)根本不起作用。相反,SecurityManager实现主要充当轻量级的“容器”组件,几乎将所有行为委托给嵌套/包装的组件。这种“包装”设计反映在上面的详细 Schema 中。

当组件实际执行逻辑时,SecurityManager实现知道如何以及何时协调组件以实现正确的行为。

SecurityManager实现和组件也与 JavaBeans 兼容,这使您(或配置机制)可以通过标准 JavaBeans 访问器/更改器方法(get */set *)轻松自定义可插拔组件。这意味着 Shiro 的体系结构模块化可以转化为非常易于配置的自定义行为。

Easy Configuration

由于 JavaBeans 的兼容性,通过支持 JavaBeans 风格的配置的任何机制(例如Spring,Guice,JBoss 等),使用自定义组件配置 SecurityManager 都很容易。

接下来我们将讨论Configuration

协助处理文档

尽管我们希望该文档对您使用 Apache Shiro 所做的工作有所帮助,但社区一直在不断改进和扩展文档。如果您想为 Shiro 项目提供帮助,请考虑在需要的地方更正,扩展或添加文档。您提供的每一点帮助都会扩大社区,进而改善 Shiro。

提交文档的最简单方法是通过单击下面的Edit链接提交请求请求,然后将其发送到User Forum用户邮件列表

首页