Apache Shiro架构设计

apache shiro的设计目标是通过直观和易用来简化应用程序安全性。shiro的核心设计模拟了大多数人对应用程序安全性的看法 - 在某人(或某事)与应用程序交互的环境中。
软件应用程序通常基于用户故事设计。也就是说,您通常会根据用户(或应该)与软件交互的方式设计用户界面或服务api。例如,您可能会说,“如果用户与我的应用程序交互,则会向他们显示一个按钮,他们可以单击该按钮查看其帐户信息。如果他们没有登录,我会显示一个注册按钮。
主要概念
shiro的架构有3个主要概念:和subject,securitymanager和realms。
subject:正如我们在教程中提到的,subject它本质上是当前正在执行的用户的特定于安全性的“视图”。虽然“用户”这个词通常意味着一个subject人,但是它可以是一个人,但它也可以代表第三方服务,守护进程帐户,cron作业或任何类似的东西 - 基本上任何与软件交互的东西。subject实例都被绑定(并要求)a securitymanager。当您与a进行交互时subject,这些交互会转换为特定于主题的交互securitymanager。securitymanager:它securitymanager是shiro架构的核心,充当一种“伞形”对象,协调其内部安全组件,共同形成一个对象图。但是,一旦为应用程序配置了securitymanager及其内部对象图,通常会将其保留,应用程序开发人员几乎将所有时间花在subjectapi上。我们稍后将securitymanager详细讨论,但重要的是要意识到,当您与a进行交互时subject,实际上是securitymanager幕后操作可以完成所有subject安全操作。这反映在上面的基本流程图中。realm:realm充当shiro与应用程序安全数据之间的“桥梁”或“连接器”。当实际与安全相关数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,shiro会从为应用程序配置的一个或多个realm中查找许多这些内容。从这个意义上讲,realm本质上是一个特定于安全性的dao:它封装了数据源的连接细节,并根据需要使相关数据可用于shiro。配置shiro时,必须至少指定一个realm用于身份验证和/或授权。综上所述securitymanager可以配置多个realms,但至少有一个是必需的。shiro提供了开箱即用的realms,可以连接到许多安全数据源(也称为目录),如ldap,关系数据库(jdbc),文本配置源(如ini和属性文件等)。如果默认域不符合您的需要,您可以插入自己的realm实现来表示自定义数据源。与其他内部组件一样,shiro securitymanager管理如何使用realms获取要表示为subject实例的安全性和身份数据。详细架构
下图显示了shiro的核心架构概念
subject(org.apache.shiro.subject.subject)当前与软件交互的实体(用户,第三方服务,cron作业等)的特定于安全性的“视图”。securitymanager(org.apache.shiro.mgt.securitymanager)如上所述,这securitymanager是shiro建筑的核心。它主要是一个“伞形”对象,协调其托管组件,以确保它们一起平稳运行。它还管理shiro对每个应用程序用户的视图,因此它知道如何对每个用户执行安全操作。authenticator(org.apache.shiro.authc.authenticator)authenticator是负责执行和反应以验证(注册)用户企图的组件。当用户尝试登录时,该逻辑由执行authenticator。该authenticator知道如何与一个或多个协调realms存储有关用户/帐户信息。从这些数据中获取的数据realms用于验证用户的身份,以保证用户确实是他们所说的人。authenticationstrategy(org.apache.shiro.authc.pam.authenticationstrategy)如果realm配置了多个,authenticationstrategy则将协调realms以确定身份验证尝试成功或失败的条件,比如说是否多个成功才算成功认证,或者一个成功认证计算成功。authorizer(org.apache.shiro.authz.authorizer)authorizer是负责确定用户在该应用程序的访问控制。这种机制最终会说明是否允许用户做某事。与此类似authenticator,它authorizer也知道如何协调多个后端数据源以访问角色和权限信息。在authorizer使用该信息来确定到底是否允许用户执行特定的操作。sessionmanager(org.apache.shiro.session.mgt.sessionmanager)将sessionmanager知道如何创建和管理用户session生命周期,提供在所有环境中的用户强大的会话体验。这是安全框架领域的一项独特功能 - 即使没有可用的web / servlet或ejb容器,shiro也能够在任何环境中管理用户sessions。默认情况下,shiro将使用现有的会话机制(例如servlet容器),但如果没有,例如在独立应用程序或非web环境中,sessiondao存在允许任何数据源被用来使用的会话。sessiondao(org.apache.shiro.session.mgt.eis.sessiondao)sessiondao执行session代表的持久性(crud)操作。这允许将任何数据存储插入会话管理基础结构。cachemanager的(org.apache.shiro.cache.cachemanager)cachemanager创建和管理cache其他四个组件使用实例的生命周期。由于shiro可以访问许多后端数据源以进行身份验证,授权和会话管理,因此缓存一直是框架中的一流架构功能,可在使用这些数据源时提高性能。任何现代开源和/或企业缓存产品都可以插入shiro,以提供快速有效的用户体验。cryptography (org.apache.shiro.crypto.cryptography)密码学是企业安全框架的自然补充。shiro的crypto软件包包含易于使用和理解的加密密码,哈希和不同编解码器实现的表示。该软件包中的所有类都经过精心设计,易于使用且易于理解。使用java本机加密支持的任何人都知道它可能是一个具有挑战性的。shiro的加密api简化了复杂的java机制,使密码学易于用于普通人。realm(org.apache.shiro.realm.realm)如上所述,realms充当shiro与应用程序安全数据之间的“桥接”或“连接器”。当实际与安全相关数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,shiro会从为应用程序配置的一个或多个领域中查找许多这些内容。您可以根据realms需要配置任意数量(通常每个数据源一个),shiro将根据需要进行身份验证和授权协调。
总结
如前所述,应用程序securitymanager执行安全操作并管理所有应用程序用户的状态。在shiro的默认securitymanager实现中,这包括:
认证授权会话管理缓存管理realm协调事件传播“记住我”服务subject创作退出等等。但是,这是尝试在单个组件中管理的许多功能。而且,如果将所有内容集中到单个实现类中,那么使这些内容变得灵活且可自定义将非常困难。
为了简化配置并实现灵活的配置/可插拔性,shiro的实现都是高度模块化的设计 - 实际上是模块化的,securitymanager实现(及其类层次结构)根本不起作用。相反,这些securitymanager实现主要充当轻量级“容器”组件,几乎将所有行为委托给嵌套/包装组件。这种“包装”设计反映在上面的详细架构图中。
当组件实际执行逻辑时,securitymanager实现知道如何以及何时协调组件以获得正确的行为。


维格娜丝2019一季度营收不同程度下滑 净利下降下降79.59%
贵得直销 各地区爆款新型仿羊皮保暖手套
苏州正规模流分析公司精工行模多年经验值得信赖
止水带的在线检测
高压风机选型过程中需要掌握哪些技巧
Apache Shiro架构设计
绍兴激光打标机厂家直销
室外上肢牵引器单杠训练 辽宁小区健身器材锻炼
批发:酸性酵素水 酸性纤维素酶液体 纤维素酶 纺织用纤维素酶
供应湖南地暖网价格@地暖网厂家¥地面防裂网
供应 乳果糖 食品级 乳果糖 营养强化剂 1kg起批
鼎配全屋定制赋能终端设计 酷家乐培训正全面进行中
桂安牌 PA-ZFZD-E2W-DT1 逃生消防双头应急灯
悬臂梁支腿垫板 聚乙烯支腿垫板重量轻
玻镁风管订购
从乐从到广汉物流专线直达*货运公司*
“素芮”健康时尚内衣 全国招商中
内蒙古LED投光灯厂家哪家知名度更高?
胶球清洗装置支持淘宝
力荐智暖电热实惠的碳纤维电暖器 河北蓄热式电暖器生产