Shiro

导读

阅读人群

正文

介绍

特点

主要的四个功能

其他功能

架构

术语


导读

        本文用来记录学习Shiro安全框架,初衷是尽可能的小而全,短而精。但是文笔有限,建议看完本文以后阅读官方文档伴读。文档内容基本来自官网加上一点点一些自身理解,希望不要误导你。

阅读人群

        如果你没有接触过Shiro或者其他安全框架建议从头部根据顺序看起,这样可能更容易理解。

        如果你已经对Shiro有过一些了解可以根据目录接口选看。

        如果你对Shiro足够了解,希望可以找到一些代码片段或者是想复制代码可以进入仓库(代码还没有写完无法跳转)。或者目录跳转到相关代码部分。

正文

介绍

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

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

以下是您可以使用Apache Shiro执行的一些操作:

  • 对用户进行身份验证以验证其身份

  • 对用户执行访问控制,例如:

    • 确定是否为用户分配了特定安全角色

    • 确定是否允许用户执行某些操作

  • 在任何环境中使用会话 API,即使没有 Web 或 EJB 容器也是如此。

  • 在身份验证、访问控制或会话生存期内对事件做出反应。

  • 聚合 1 个或多个用户安全数据源,并将其全部呈现为单个复合用户“视图”。

  • 启用单点登录 (SSO) 功能

  • 启用“记住我”服务以进行用户关联,而无需登录
    ...
    等等 - 全部集成到一个有凝聚力的易于使用的 API 中。

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

特点

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Shiro_第1张图片

主要的四个功能

        Authentication 用户的认证

        Authorization  访问控制

        Session Management 会话管理,即使在非Web 或EJB应用程序也是可以使用

        Cryptography 密码的加密

其他功能

        Web Support  Shiro的Web支持Api 帮助轻松的保护Web应用程序

        Caching Shiro的一级缓存,确保安全操作的同时保证快速高效

        Concurrency 支持多线程应用程序的并发功能

        Testing 支持单元和继承测试

        Run As 允许用户可以使用其他用户的身份的功能

        Remember  记住我,跨会话记住用户的身份

架构

        从架构上可以分为三个概念,subject、securityManager、reaim,Subject 可以理解为用户,实际不止代表用户也有可能是第三方服务、一个程序、定时任务等等,与软件进行交互的"实体"都可以称为Subject。securityManager 架构的核心,通过配置各种对象来完成业务逻辑,可以理解为钢铁侠的反应炉。Realm Shiro与数据源之间的桥梁,用于获取用户的数据。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Shiro_第2张图片

        更为详细的架构图

        Subject  与软件交互的实体(用户、第三方服务、一个定时程序)

        Security Manager Shrio的核心

        authenticator 负责执行和响应用户身份的组件,当用户尝试登录时,由该逻辑执行

        authenticationStrategy 如果配置多个(Realm)数据源,用于管理Realm的策略,例如一个realm中的用户数据与当前需要验证的用户数据对应上了就代表对应成功,还是所有的Realm都对应上才算成功

        Authorizer 负责确定用户在应用程序中访问控制的组件

        SessionManager 用户的会话管理

        SessionDAO 持久性的管理用户的会话

        CacheManager Shiro可以访问需要后端数据源进行身份验证,使用缓存可以大大提高效率,避免每次都直接查库

        Cryptography 加密包,有Hash和不同编码解码器实现的表示

        Realms 充当Shiro和数据源之间的桥梁

        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        Shiro_第3张图片

术语

        建议先了解相关术语,方便后面的阅读。举了一些例子用于说明这些术语可能不恰当,

        Authentication:身份验证

                验证主题身份的过程 - 用来验证某个人确实是他所说的人,例如 张三说他是张三  我们需要查看他的身份证查验这个人确实是张三,而不是随便一个人说他自己是张三就是张三。

        Authorization:授权/访问控制

                访问控制,用来验证某个主体或者人是否拥有某种权限,例如张三说天安门是他的不动产,我们需要验证天安门是否是他的不动产,如果张三有天安门的产权证那么天安门就是他的,这个过程就是访问控制。

                身份验证和访问控制的单词很像很容易混淆,其实根据举例应该可以区分这两个的区别, 身份验证用来验证某个主体是否是合法的,访问控制用来验证合法的主题是否拥有某种权限。

        Cipher:密码

                用来执行加解密的算法

        Credential:凭据

                用来验证主体身份的一条信息,身份验证期间,将一条或多条凭据和主体一起提交,与身份验证例子中的身份证一样。

        Cryptography:密码学

                消息摘要,加密的一个过程和cipher 是分开的,暂时不知道区别

        Hash:哈希

                使用Hash算法进行消息摘要

        Permission:权限

                用于声明某个方法或者行为需要什么权限,安全策略中的最低级别,当需要验证权限时,就已经完成身份验证,角色验证了。实际就是一个字符串。例如在

        Principal:主要的标识

                可以理解为用户的标识,类似于键值对的Key,根据key就可以从其他地方获取Value 避免主体过大

        Realm:数据源

                数据访问对象,通过Realm对象获取用户的信息,底层用户可能会存储Ldap或Mariadb数据库中,通过Realm接口可以屏蔽底层数据库的差异,让获取用户的信息具有统一性

        Role:角色

                相比于权限,可以把角色理解为一个权限的集合,例如张三需要打扫一座大楼的卫生,大楼的每层需要开门权限才可以开门进去打扫卫生,如果每层都给张三进行授权,权限太多且不好管理,我们使用角色进行分配的话,给张三一个保洁的角色就可以开启大楼的每层大门

        Session:会话

                一段时间内与软件系统交互的单个用户/主题相关联有状态的数据上下文,举个例子我们去游乐园需要购买门票,游乐园有的项目只允许进去一次,所以游玩这些项目的时候门票会被扣个洞,用于记录我们已经体验过这个项目了,我们出游乐园的时候会回收门票,这个门票这就可以理解为数据上下文信息。

        Subject:主体

                访问项目的不单单是指用户,也有可能是一段程序,主体用来表示这个意思

                

你可能感兴趣的:(安全,shiro)