Apache Shiro中文文档(官方翻译)

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

软件应用程序一般是根据用户案例设计的。也就是说,您一般会根据用户与软件的交互方式来设计用户界面或服务API。例如,您可能会说:“若是与个人应用程序交互的用户已登陆,我将向他们显示一个按钮,使他们能够单击以查看其账户信息。若是他们没有登陆,我将显示一个注册按钮。”spring

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

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

高层概述

在最高概念层次,四郎的建筑有3个主要的概念:SubjectSecurityManagerRealms。下图是这些组件如何交互的高级概述,咱们将在下面介绍每一个概念:编程

  • 主题:正如咱们在刚才提到教程,在Subject本质上是当前正在执行的用户的安全特定“视图”。“用户”一词一般表示一我的,一我的Subject能够是一我的,但它也能够表示第三方服务,守护程序账户,cron做业或相似的东西-基本上是当前与该软件交互的任何东西。

    Subject实例都绑定到(并要求)SecurityManager。当您与互动时Subject,这些互动会转化为与主题相关的互动SecurityManager后端

  • SecurityManagerSecurityManager是Shiro体系结构的核心,并充当一种“伞”对象,该对象协调其内部安全组件,这些安全组件一块儿造成对象图。可是,一旦为应用程序配置了SecurityManager及其内部对象图,一般就不理会它,而且应用程序开发人员几乎全部时间都花在SubjectAPI上。

    稍后咱们将SecurityManager详细讨论,可是重要的是要认识到,当您与进行交互时SubjectSecurityManager对于任何Subject安全操做而言,确实是幕后工做。这反映在上面的基本流程图中。api

  • 领域:领域充当Shiro与应用程序的安全数据之间的“桥梁”或“链接器”。当真正须要与安全性相关的数据(例如用户账户)进行交互以执行身份验证(登陆)和受权(访问控制)时,Shiro会从一个或多个为应用程序配置的领域中查找许多此类内容。

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

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

    像其余内部组件同样,ShiroSecurityManager管理着如何使用领域来获取要表示为Subject实例的安全性和身份数据。session

详细架构

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

  • 主题org.apache.shiro.subject.Subject
    当前与软件交互的实体(用户,第三方服务,计划任务等)的特定于安全性的“视图”。
  • 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是部件负责肯定用户在该应用程序的访问控制。它是最终代表是否容许用户作某事的机制。像同样AuthenticatorAuthorizer还知道如何与多个后端数据源进行协调以访问角色和权限信息。在Authorizer使用该信息来准确肯定是否容许用户执行特定的操做。
  • SessionManagerorg.apache.shiro.session.mgt.SessionManager
    SessionManager知道如何建立和管理用户Session生命周期,提供在全部环境中的用户强大的会话体验。这是安全框架领域中的一项独特功能-Shiro可以在任何环境中本地管理用户会话,即便没有Web / Servlet或EJB容器也能够。默认状况下,Shiro将使用现有的会话机制(例如Servlet容器)(若是可用),可是若是没有这种机制(例如在独立应用程序或非Web环境中),它将使用其内置的企业会话管理来提供相同的编程经验。的SessionDAO存在容许任何数据源被用来坚持的会议。

  • CacheManager的org.apache.shiro.cache.CacheManager
    CacheManager建立和管理Cache其余四郎组件使用实例的生命周期。由于Shiro能够访问许多后端数据源以进行身份​​验证,受权和会话管理,因此缓存一直是框架中的一流架构功能,能够在使用这些数据源时提升性能。能够将任何现代的开源和/或企业缓存产品插入Shiro,以提供快速有效的用户体验。
  • 密码术org.apache.shiro.crypto。*
    密码术是企业安全框架的天然补充。Shiro的crypto软件包包含易于使用和理解的密码学密码,哈希(又名摘要)和不一样编解码器实现的表示形式。该软件包中的全部类都通过精心设计,以使其易于使用和理解。使用Java的本机加密技术支持的任何人都知道,驯服它多是具备挑战性的动物。Shiro的加密API简化了复杂的Java机制,并使加密技术易于普通凡人使用。
  • 领域org.apache.shiro.realm.Realm
    如上所述,领域充当Shiro与应用程序的安全数据之间的“桥梁”或“链接器”。当真正须要与安全性相关的数据(例如用户账户)进行交互以执行身份验证(登陆)和受权(访问控制)时,Shiro会从一个或多个为应用程序配置的领域中查找许多此类内容。您能够根据Realms须要配置任意数量(一般每一个数据源一个),而且Shiro会根据须要进行协调,以进行身份​​验证和受权。

SecurityManager

由于Shiro的API鼓励采用以中心为Subject中心的编程方法,因此大多数应用程序开发人员不多(若是有的话)SecurityManager直接与之交互(可是框架开发人员有时可能会以为有用)。即便这样,了解这些SecurityManager功能的功能仍然很重要,尤为是在为应用程序配置功能时。

设计

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

  • 认证方式
  • 受权书
  • 会话管理
  • 缓存管理
  • 领域协调
  • 事件传播
  • “记住我”服务
  • 主题创做
  • 注销等。

但这是尝试在单个组件中进行管理的许多功能。并且,若是将全部内容都纳入一个实现类中,那么使这些事情变得灵活和可定制将很是困难。

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

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

SecurityManager实现方式和组件也兼容的JavaBeans,它容许(或配置机构),以方便地定制可插组件经由标准的JavaBeans存取器/ mutator方法(获取* /组*)。这意味着Shiro的体系结构模块化能够转化为很是易于配置的自定义行为。

简易配置


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

接下来咱们将介绍配置

伸出援手与文件

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

贡献文档的最简单方法是经过单击Edit下面的连接来提交请求请求,而后将其发送到“用户论坛”或“用户邮件列表”

相关文章
相关标签/搜索