shiro入门理解

1.shiro架构简介查找

进入shiro官网http://shiro.apache.org/

点击 Get Started

点击Architecture

2.什么是Apache Shiro

Apache Shiro是一个功能强大且灵活的开源安全框架,可以清晰地处理身份验证,授权,企业会话管理和加密。

Apache Shiro的首要目标是易于使用和理解。安全有时可能非常复杂,甚至是痛苦的,但事实并非如此。框架应尽可能掩盖复杂性,并提供简洁直观的API,以简化开发人员确保其应用程序安全的工作。

以下是Apache Shiro可以做的一些事情:

  • 验证用户以验证其身份
  • 为用户执行访问控制,例如:
    • 确定是否为用户分配了某个安全角色
    • 确定是否允许用户执行某些操作
  • 在任何环境中使用Session API,即使没有Web容器或EJB容器也是如此。
  • 在身份验证,访问控制或会话生命周期内对事件做出反应。
  • 聚合用户安全数据的1个或多个数据源,并将其全部显示为单个复合用户“视图”。
  • 启用单点登录(SSO)功能
  • 无需登录即可为用户关联启用“记住我”服务
    ……
    以及更多 - 全部集成到一个易于使用的内聚API中。

Shiro尝试为所有应用程序环境实现这些目标 - 从最简单的命令行应用程序到最大的企业应用程序,而不会强制依赖其他第三方框架,容器或应用程序服务器。当然,该项目旨在尽可能地融入这些环境,但它可以在任何环境中开箱即用。

3.Apache Shiro功能

Apache Shiro是一个具有许多功能的综合应用程序安全框架。下图显示了Shiro关注其能量的位置,此参考手册将以类似方式组织:

ShiroFeatures

Shiro针对Shiro开发团队所称的“应用程序安全的四大基石” - 身份验证,授权,会话管理和加密:

  • 身份验证:有时称为“登录”,这是证明用户是他们所说的人的行为。
  • 授权:访问控制的过程,即确定“谁”可以访问“什么”。
  • 会话管理:即使在非Web或EJB应用程序中,也可以管理特定于用户的会话。
  • 密码学:使用加密算法保持数据安全,同时仍然易于使用。

还有其他功能可以在不同的应用程序环境中支持和强化这些问题,尤其是:

  • Web支持:Shiro的Web支持API可帮助轻松保护Web应用程序。
  • 缓存:缓存是Apache Shiro API中的第一层公民,可确保安全操作保持快速高效。
  • 并发:Apache Shiro支持具有并发功能的多线程应用程序。
  • 测试:存在测试支持以帮助您编写单元和集成测试,并确保您的代码按预期受到保护。
  • “运行方式”:允许用户假定其他用户的身份(如果允许)的功能,有时在管理方案中很有用。
  • “记住我”:记住用户在会话中的身份,因此他们只需要在必要时登录。

4.Apache Shiro架构简述

Apache Shiro的设计目标是通过直观和易用来简化应用程序安全性。Shiro的核心设计模拟了大多数人对应用程序安全性的看法 - 在某人(或某事)与应用程序交互的环境中。

软件应用程序通常基于用户故事设计。也就是说,您通常会根据用户(或应该)与软件交互的方式设计用户界面或服务API。例如,您可能会说,“如果用户与我的应用程序交互,则会向他们显示一个按钮,他们可以单击该按钮查看其帐户信息。如果他们没有登录,我会显示一个注册按钮。“

此示例语句指示应用程序主要是为满足用户要求和需求而编写的。即使“用户”是另一个软件系统而不是人类,您仍然会编写代码以反映基于当前与您的软件交互的人(或什么)的行为。

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

5.Apache Shiro架构高级概述

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

ShiroBasicArchitecture

  • 主题:正如我们在教程中提到的,Subject它本质上是当前正在执行的用户的特定于安全性的“视图”。虽然“用户”这个词通常意味着一个Subject人,但是它可以是一个人,但它也可以代表第三方服务,守护进程帐户,cron作业或任何类似的东西 - 基本上是当前与软件交互的任何东西。

    Subject实例都被绑定(并要求)a SecurityManager。当您与a进行交互时Subject,这些交互会转换为特定于主题的交互SecurityManager

  • SecurityManager:它SecurityManager是Shiro架构的核心,充当一种“伞形”对象,协调其内部安全组件,共同形成一个对象图。但是,一旦为应用程序配置了SecurityManager及其内部对象图,通常会将其保留,应用程序开发人员几乎将所有时间花在SubjectAPI上。

    我们稍后将SecurityManager详细讨论,但重要的是要意识到,当您与a进行交互时Subject,实际上是SecurityManager幕后操作可以完成所有Subject安全操作。这反映在上面的基本流程图中。

  • 领域:领域充当Shiro与应用程序安全数据之间的“桥梁”或“连接器”。当实际与安全相关数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个领域中查找许多这些内容。

    从这个意义上讲,Realm本质上是一个特定于安全性的DAO:它封装了数据源的连接细节,并根据需要使相关数据可用于Shiro。配置Shiro时,必须至少指定一个Realm用于身份验证和/或授权。所述SecurityManager可与多个境界被配置,但至少有一个是必需的。

    Shiro提供了开箱即用的Realms,可以连接到许多安全数据源(也称为目录),如LDAP,关系数据库(JDBC),文本配置源(如INI和属性文件等)。如果默认域不符合您的需要,您可以插入自己的Realm实现来表示自定义数据源。

    与其他内部组件一样,Shiro SecurityManager管理如何使用Realms获取要表示为Subject实例的安全性和身份数据。

6.Apache Shiro的详细的架构

下图显示了Shiro的核心架构概念,后面是每个概述的简短摘要:

ShiroArchitecture

  • Subjectorg.apache.shiro.subject.Subject
    当前与软件交互的实体(用户,第三方服务,cron作业等)的特定于安全性的“视图”。
  • SecurityManagerorg.apache.shiro.mgt.SecurityManager
    如上所述,这SecurityManager是Shiro建筑的核心。它主要是一个“伞形”对象,协调其托管组件,以确保它们一起平稳运行。它还管理Shiro对每个应用程序用户的视图,因此它知道如何对每个用户执行安全操作。
  • 认证器org.apache.shiro.authc.Authenticator
    Authenticator是,负责执行和反应以验证(注册)用户企图的组件。当用户尝试登录时,该逻辑由执行Authenticator。该Authenticator知道如何与一个或多个协调Realms存储有关用户/帐户信息。从这些数据中获取的数据Realms用于验证用户的身份,以保证用户确实是他们所说的人。
    • 身份验证策略org.apache.shiro.authc.pam.AuthenticationStrategy
      如果Realm配置了多个,AuthenticationStrategy则将协调领域以确定身份验证尝试成功或失败的条件(例如,如果一个领域成功但其他领域失败尝试是否成功?必须所有领域成功吗?只有第一个?)。
  • 授权器org.apache.shiro.authz.Authorizer
    Authorizer是部件负责确定用户在该应用程序的访问控制。这种机制最终会说明是否允许用户做某事。与此类似Authenticator,它Authorizer也知道如何协调多个后端数据源以访问角色和权限信息。在Authorizer使用该信息来确定到底是否允许用户执行特定的操作。
  • SessionManagerorg.apache.shiro.session.mgt.SessionManager
    SessionManager知道如何创建和管理用户Session生命周期,提供在所有环境中的用户强大的会话体验。这是安全框架领域的一项独特功能 - 即使没有可用的Web / Servlet或EJB容器,Shiro也能够在任何环境中本地管理用户Sessions。默认情况下,Shiro将使用现有的会话机制(例如Servlet容器),但如果没有,例如在独立应用程序或非Web环境中,它将使用其内置的企业会话管理提供相同的编程经验。的SessionDAO存在允许任何数据源被用来坚持的会议。
  • CacheManager的org.apache.shiro.cache.CacheManager
    CacheManager创建和管理Cache其他四郎组件使用实例的生命周期。由于Shiro可以访问许多后端数据源以进行身份​​验证,授权和会话管理,因此缓存一直是框架中的一流架构功能,可在使用这些数据源时提高性能。任何现代开源和/或企业缓存产品都可以插入Shiro,以提供快速有效的用户体验。
  • 密码学org.apache.shiro.crypto。*
    密码学是企业安全框架的自然补充。Shiro的crypto软件包包含易于使用和理解的密码密码,哈希(aka摘要)和不同编解码器实现的表示。该软件包中的所有类都经过精心设计,易于使用且易于理解。使用Java本机加密支持的任何人都知道它可能是一个具有挑战性的驯服动物。Shiro的加密API简化了复杂的Java机制,使密码学易于用于普通的凡人。
  • 领域org.apache.shiro.realm.Realm
    如上所述,Realms充当Shiro与应用程序安全数据之间的“桥接”或“连接器”。当实际与安全相关数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个领域中查找许多这些内容。您可以根据Realms需要配置任意数量(通常每个数据源一个),Shiro将根据需要进行身份验证和授权协调。

7.Apache Shiro的SecurityManager

因为Shiro的API鼓励采用一种Subject中心编程方法,所以大多数应用程序开发人员很少(如果有的话)SecurityManager直接与之交互(框架开发人员有时可能会发现它很有用)。即便如此,了解SecurityManager功能仍然很重要,尤其是在为应用程序配置功能时。

SecurityManager的设计:

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

  • 认证
  • 授权
  • 会话管理
  • 缓存管理
  • 协调
  • 事件传播
  • “记住我”服务
  • 主题创作
  • 退出等等。

但是,这是尝试在单个组件中管理的许多功能。而且,如果将所有内容集中到单个实现类中,那么使这些内容变得灵活且可自定义将非常困难。

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

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

SecurityManager实现方式和组件也JavaBeans的兼容,它允许(或配置机构)能够容易地通过标准的JavaBeans存取/ mutator方法定制可插组件(获取* /组*)。这意味着Shiro的架构模块化可以转化为非常容易的自定义行为配置。


shiro入门理解
http://hanqichuan.com/2019/07/23/权限框架/shiro入门理解/
作者
韩启川
发布于
2019年7月23日
许可协议