Apache Shiro官方构架文档中文翻译

博主:爱码叔
个人博客站点: icodebook
公众号:漫话软件设计
专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上,欢迎大家关注访问!

本文翻译自Shiro官方文档,文章介绍了Shrio的架构,详细讲解了Shiro中的关键组件和概念。建议在深入学习Shiro之前仔细理解本文。

原文地址:Apache Shiro | Simple. Java. Security.

Apache Shiro Architecture

Apache Shiro的设计目标,是通过直觉化的设计,来简化程序安全开发,并且简单易用。Shiro核心设计模型符合大众对程序安全的理解----程序的安全存在于人(或其它任何东西)和系统交互的上下文环境中.

我们通常会通过用户故事来设计软件。这意味着,你会基于用户和软件的交互,来设计用户接口或者提供api。例如,如果用户为登录状态,可以给他一个按钮,点击后可以看自己账户的信息。如果没有登录,则会显示一个登录按钮。

这个例子可以看到,程序通常都是为了满足用户的需求。甚至于用户可能是另外一个软件系统,并不是一个人,你仍旧可以基于和你系统交互的人或物来编码。

Shiro 的设计通过匹配软件开发者已经形成的直觉,来传递这些概念。Apache Shiro保留了几乎所有在已有应用中形成的直觉并且简单易用。

High-Level Overview

在最高概念层面中,Shiro架构有三个主要的概念:Subject,SecurityManager和Realm。 下面的图展示了这些组件的关系,我们将会讲解下图中每一个概念:

Subject:正如我们教程中提到的,Subject是程序安全视角的user。然而user通常指人类,但Subject可以是人,也可以指第三方的服务,守护进程账户,定时任务,或者其他类似的东西-基本上可以是和软件交互的任何事物。

Subject 的实例都绑定在SecurityManager上。当你和subject交互时,SecurityManager把交互转化为subject领域的交互。

SecurityManager:SecurityManager是Shiro架构的核心,他扮演着伞对象的角色(持有各组件引用,协调调用),来协调它内部的安全组件,他们一块来形成对象视图。然而,一旦程序中的SecurityManager和他内部对象已经配置好,通常上就不用再管他,程序的开发人员几乎大部分时间都会花在Subject API上。

我们接下来会深入讨论SeccurityManager。当你和Subject交互时,所做的任何Subject的安全操作,实际上是SecurityManager在幕后辛苦劳作。你要意识到这一点很重要。这些都在上面的基础流程图中有所反映。

Realms:Realms在Shiro和你的程序安全数据之间,扮演着桥梁或者连接器的角色。当和安全相关数据有交互时,比如用户登录校验和鉴权,Shiro通过程序中配置的一个或者多个Realm来查询。

在此场景中,Realm是安全领域的DAO:它封装了数据源连接的细节,使得相关数据对于shiro可用。当你配置Shiro,你必须指定至少一个realm用来登录和授权。SecurityManager可能会配置多个Realm,但是至少有一个。

Shrio提供了开箱即用的Realm来链接各种安全数据源,例如LDAP,关系型数据库(JDBC),文本配置如INI或者properties文件,等等。如果默认的Realm不能满足你的需求,你可以插入你自己的Realm实现来表述客制化的数据源。

就像其他内部的组件,Shiro的SecurityManager管理如何使用Realm来获取Subject实例相关的安全和身份信息。

Detailed Architecture

下图表展示了Shiro的核心架构概念

Subject

安全领域层面命名的,当前和系统交互的实体(用户,第三方服务,定时任务等等)

SecurityManager

如上文所述,SecurityManager是Shiro架构的核心。他很像是一个伞对象,来协调他所管理的组件,确保她们配合丝滑。它同时管理Shiro视角的每一个用户,他知道怎么执行每个用户的安全操作。

Authenticator

Authenticator组件负责执行用户的登录操作。当用户尝试登录时,Authenticator会执行登录逻辑。Authenticator知道怎么和存储用户账户信息的一个或多个Realm协调工作。Realm中维护的数据用来检查用户身份,确保这个用户就是他所说的那个用户。

Authentication Strategy

如果配置了多个Realm,AuthenticationStrategy将会协调Realm来确定条件来判断认证成功或者失败。(例如,如果一个realm成功了,但是其他的失败了,那么登录成功了吗?必须所有的realm都成功?还是仅是第一个?)

Authorizer

Authorizer组件负责确保用户的访问控制。说白了,他就是管控用户可以或者不可以做什么事情。就像Authenticator,Authorizer也知道如何和多种数据源协调来访问role和permission信息。Authorizer使用这些信息来验证用户是否允许做一个给定的操作。

SessionManager

SessionManager负责创建和管理用户的session生命周期,在任何环境中都可以给用户提供健壮的session体验。这在安全框架世界中是第一无二的特性----Shiro在任何环境,甚至没有Web/servlet或者EJB的环境中,都具备原生管理用户session的能力。默认情况下,Shiro会尽可能使用已经存在的session机制(比如Servlet Container),但是如果没有存在的session机制,例如在独立的程序或者非web环境,他会使用内置的企业session管理来提供同样的编程体验。既有的SessionDAO允许任使用何数据源持久化session

SessionDAO

SessionManager操作SessionDAO来执行session持久化(CRUD)操作。这可以允许任何数据存储被插入到session管理的基础设施中。

    

CacheManager

CacheManager创建和管理其它Shiro组件使用的缓存实例生命周期。因为Shiro认证、授权、session管理中可以访问多种后端数据源,缓存一直以来都是最优级别的架构特性,来提高使用这些数据的性能。任何的现代开源或者企业级缓存产品都可以插入到Shiro中来提供快速高效的用户体验。

Cryptography

Cryptography对于企业级安全框架是顺理成章的附加物。Shiro的crypto包含有易于使用和理解的密码工具,Hash(也称作摘要)和多种多样的编码实现。这个包中所有的类都精心设计以确保易于使用和理解。任何使用过java原生加密包的都知道它像驯兽一样困难。Shiro的API简化了Java机制,使得普通人也可以很简单的去使用。

Realms

如上文所述,Realms在Shiro和你应用的安全数据间扮演着桥梁或者连接器的角色。当发生一次真实的安全数据交互,比如用户登录和鉴权,Shiro会从程序配置好的一或多个Realm中查询很多次数据。你可以配置你所需要的任意数量的Realm,Shrio在授权和鉴权的时候会去协调使用他们。

The SecurityManager

由于Shiro的API鼓励以Subject为中心的编程方法,绝大多数开发者很少直接和SecurityManager打交道。(框架开发者可能有时会觉得它很有用)。即使这样,去了解SecurityManager如何工作还是很重要的,尤其是当你在给应用配置SecurityManager时。

Design

如之前所说,程序的SecurityManager执行安全操作,并且管理所有系统用户的状态。Shiro的默认实现中,包含如下:

  • 授权
  • 鉴权
  • session管理
  • cache管理
  • Realm管理
  • 事件传播
  • Rmember Me服务
  • Subject创建
  • 登出及更多

但是,要让一个组件尝试管理这么多的功能,并且还要让这些东西可扩展可客制化,把全部这些内容放到一个单独的实现类中,这真的是非常的难。

为了简化配置并使得配置可扩展、可插拔,Shiro的实现全部设计为高度模块化的。实际上所谓的模块化,其实就是SecurityManager的实现并没有做太多的事情。相反,SecurityManger的实现更像是轻量级容器组件,把几乎全部的行为授权给内部的/包装好的组件。这种包装的设计概念,在上面的细节架构中有所体现。

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

SecurityManager 实现和组件也是兼容JavaBean的,这允许你通过标准javabean的访问和设置器来轻松客制化可接入的组件。这意味着Shiro架构上的模块化特性可以把客制化行为转化为非常简单的配置。

Easy Configuration

因为JavaBean的兼容性,通过任何支持javabean风格配置的机制,来配置SecurityManager客制化的组件都非常简单。例如Spring,Guice,JBoss,等等。

  • 24
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: shiro是一个Java开发的开源安全框架,用于进行身份认证、授权和会话管理等安全相关的操作。shiro官方文档是一份详细的介绍和使用指南,有助于开发人员快速了解和掌握shiro的使用。 shiro中文官方文档是针对中国开发者而编写的,文档内容由shiro官方团队进行翻译和整理,确保准确传达原始文档的含义。这份文档包含了shiro的基本概念、核心组件、配置方法以及常见的使用场景等内容。 在官方文档中,首先会介绍shiro的基本概念,如Subject、Realm、Permission等。然后,会阐述如何配置shiro的环境和依赖,在应用程序中引入shiro的相关依赖并进行配置,以实现身份认证和授权的功能。 官方文档还会详细说明如何使用shiro进行身份认证,包括使用自定义的Realm实现用户认证和授权等功能。同时,文档也会指导开发者如何管理用户的会话信息和进行权限控制,以保护应用程序的安全。 此外,官方文档还会提供一些常见的使用场景和示例代码,帮助开发者更好地理解和掌握shiro的实际应用。通过官方文档的阅读和实践,开发者可以加深对shiro的理解,并能够灵活地应用在实际的项目开发中。 总而言之,shiro中文官方文档是一份对于开发者非常有价值的参考材料,可以帮助开发者快速入门和掌握shiro的使用方法,提升应用程序的安全性。 ### 回答2: Shiro中文官方文档是一个详细的文档资源,用于帮助理解和使用Shiro安全框架。该文档提供了全面的内容,包括Shiro的基本概念、架构和核心组件,以及如何在实际项目中集成和使用Shiro进行身份验证和授权等功能。 文档的结构清晰,内容组织合理,易于阅读和理解。通过官方文档,我们可以了解到Shiro的整体工作原理和使用方法,它通过模块化的设计可以灵活地满足各种安全需求。 在文档中,我们可以学习如何配置Shiro,包括如何定义用户、角色和权限等信息,并且了解如何使用Shiro提供的各种身份验证和授权机制来保护应用程序的安全性。 此外,文档还提供了丰富的示例代码和解释,帮助我们更好地理解每个功能的实现方式。通过这些示例,我们可以学习到如何使用Shiro来进行常见的安全操作,如用户登录、权限检查和会话管理等。 总的来说,Shiro中文官方文档是一个价值非常高的资源,它为学习和使用Shiro提供了全面的指导。无论是初学者还是有一定经验的开发者,都能从中受益并快速上手使用Shiro框架。 ### 回答3: shiro是一个流行的Java安全框架,用于身份验证、授权和会话管理等安全功能。它提供了一套易于使用和灵活的API,可以帮助开发者快速实现应用程序的安全性。 shiro中文官方文档官方团队为了方便中国开发者使用shiro而提供的中文文档。这个文档详细介绍了shiro的各个功能和特性,以及如何在实际项目中使用shiro来保护应用程序的安全性。 文档内容主要包括以下几个方面: 1. 身份验证:介绍了shiro如何进行用户名密码的验证以及其他的身份认证方式,包括基于数据库、LDAP等的认证方式。 2. 授权管理:讲解了如何使用shiro进行细粒度的访问控制,包括角色、权限的管理和配置等。 3. 会话管理:给出了一些关于会话管理的方案,包括基于Cookie、URL重写等的会话跟踪和管理方法。 4. 加密和哈希:详细介绍了如何使用shiro提供的加密和哈希算法来确保用户密码和敏感信息的安全性。 5. 缓存管理:介绍了如何使用shiro提供的缓存功能来提高系统性能和用户体验。 6. 整合和扩展:介绍了如何将shiro与其他框架或技术进行整合,并提供了一些扩展shiro功能的方法。 通过阅读shiro中文官方文档,开发者可以了解shiro的基本概念和功能,并且能够清晰地了解如何在自己的项目中使用shiro来提供安全保障。文档中提供了丰富的示例代码和实际应用场景,对初学者来说非常友好。总体来说,shiro中文官方文档是学习和使用shiro的重要指南,对于帮助开发者理解和掌握shiro非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值