Shiro之学习笔记(一)

一、Shiro介绍

        Shiro是Apache提供的功能强大而灵活的安全框架,Apache Shiro的设计目标是通过直观和易用来简化应用程序安全性。

二、Shiro的简单架构

            

            Shiro的架构有三个主要概念:SubjectSecurityManagerRealms

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

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

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

    要意识到,当Subject与系统进行交互时,实际上SecurityManager幕后操作可以完成所有Subject安全操作。这反映在上面的基本流程图中。

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

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

    Shiro提供了开箱即用的领域,可以连接到许多安全数据源(也称为目录),如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用于验证用户的身份,以保证用户确实是他们所说的人。

    • Authentication Strategy(org.apache.shiro.authc.pam.AuthenticationStrategy)
      如果配置了多个RealmAuthenticationStrategy将协调领域以确定身份验证尝试成功或失败的条件(例如,如果一个Realm成功但其他Realm失败就会成功吗?必须所有领域都成功吗?还是说只要第一个成功?)。

  • Authorizer(org.apache.shiro.authz.Authorizer)
    Authorizer是负责确定用户在该应用程序的访问控制组件。这种机制最终会说明是否允许用户做某事。与此类似AuthenticatorAuthorizer也知道如何协调多个后端数据源以访问角色和权限信息。在Authorizer使用该信息来确定到底是否允许用户执行特定的操作。

  • SessionManager(org.apache.shiro.session.mgt.SessionManager)
    SessionManager知道如何创建和管理用户Session生命周期,提供在所有环境中的用户强大的会话体验。这是安全框架领域的一项独特功能 - 即使没有可用的Web / Servlet或EJB容器,Shiro也能够在任何环境中本地管理用户会话。默认情况下,Shiro将使用现有的会话机制(例如Servlet Container),但如果没有,例如在独立应用程序或非Web环境中,它将使用其内置的企业会话管理提供相同的编程经验。的SessionDAO存在允许任何数据源被用来坚持的会议。

    • SessionDAO(org.apache.shiro.session.mgt.eis.SessionDao)
      SessionDAO执行Session代表的持久性(CRUD)操作SessionManager。这允许将任何数据存储插入会话管理基础结构。

  • CacheManager的(org.apache.shiro.cache.CacheManager)
    CacheManager创建和管理Cache其他四个组件使用实例的生命周期。由于Shiro可以访问许多后端数据源以进行身份​​验证,授权和会话管理,因此缓存一直是框架中的一流架构功能,可在使用这些数据源时提高性能。任何现代开源和/或企业缓存产品都可以插入Shiro,以提供快速有效的用户体验。

  • 密码学(org.apache.shiro.crypto.*)
    密码学是企业安全框架的自然补充。Shiro的crypto软件包包含易于使用和理解的密码密码,哈希(aka摘要)和不同编解码器实现的表示。该软件包中的所有类都经过精心设计,易于使用且易于理解。使用Java本机加密支持的任何人都知道它可能是一个具有挑战性的动物来驯服。Shiro的加密API简化了复杂的Java机制,使密码学易于用于普通的凡人。

  • Realm(org.apache.shiro.realm.Realm)
    如上所述,Realms充当Shiro和应用程序安全数据之间的“桥接”或“连接器”。当实际与安全相关的数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个领域中查找许多这些内容。您可以根据Realms需要配置任意数量(通常每个数据源一个),Shiro将根据需要进行身份验证和授权协调。

四、Shiro功能

          Shiro是一个具有许多功能的综合应用程序安全框架。下图显示了Shiro所具有的功能:

        

 

        Shiro应用程序安全的四大功能 - 身份验证,授权,会话管理和加密:

  •  身份验证:有时也称为“登录”,这是证明用户是他们所说的人的行为。

  •  授权:访问控制的过程,即确定“谁”可以访问“什么”。

  •  会话管理:即使在非Web或EJB应用程序中,也可以管理特定于用户的会话。

  • 加密:使用加密算法保持数据安全,同时仍然易于使用。

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值