1.Shiro是什么?
Shiro 是一个 强大且易用 的Java安全框架,执行 身份验证 、授权 、 密码 和 会话管理 。使用 Shiro 的易于理解的API,您可以 快速 、轻松 地获得任何应用程序,从 最小 的移动应用程序到 最大 的网络和企业应用程序。
2.Shiro 三大核心概念:Subject, SecurityManager 和 Realms
1. Subject 当前操作用户
当您保护您的应用程序时,可能最想问的问题就是 “谁是当前用户” 或者是 “当前用户是否允许执行某件事情” 。当我们编写代码或设计用户界面是,我们常常会问自己这些问题:应用程序通常是基于用户角度的,希望尽可能的给每一个用户带来更多的体验或者是获得更多的功能。因此,我们在应用程序中就要考虑要用最安全,最自然的方式传递给用户。Shiro 的 API 在器主题概念中就体现了这种思维方式。
Subject 是一个 安全术语,它指的是 当前操作用户 或者说是 当前正在执行的用户,但它又不仅仅只是被称作为 用户,因为 用户 这个词通常与人有关。在 Shiro 的世界中,Subject 可以指一个人,也可以是 3rd(第三方进程)、 **后台账户(DaemonAccount)**或者是 其他类似的事物。它只是意味着 当前跟软件交互的东西 。但考虑到大多数目的和用途,你可以把它视为是 Shiro 的 用户 概念。
当我们在获取 Subject 后,我们就可以立即使用 Shiro 操作来访问当前用户中所有操作的90%,比如 登录,注销,会话,执行授权等等。
Subject 代表了当前用户的安全操作,SecurityManager 则管理所有用户的安全操作。
2. SecurityManager 安全管理器
Subject 的 “幕后” 对应物就是 SecurityManager,当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。
SecurityManager 是 Shiro 框架的核心,Shiro通过 SecurityManager 来管理内部组件实例,并通过它来提供安全管理的各种服务。
几乎每个应用程序中总会有一个 SecurityManager 实例,它的本质就是一个 单例应用程序(尽管他不需要静态化)
3. Realm 领域
Realm 充当了 Shiro 与应用安全数据间的 桥梁 或者 连接器 。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro 会从应用配置的 一个或 多个 Realm 中查找用户及其权限信息。
从这个意义上讲,Realm 实质上是一个安全相关的 DAO :它封装了数据源的连接细节,并在需要时将相关数据提供给 Shiro 。当配置 Shiro 时,你必须至少指定一个 Realm ,用于认证和/或授权。可以配置多个 Realm ,但是至少需要一个。
Shiro 内置了可以连接大量安全数据源(又名目录)的 Realm ,如 LDAP 、关系数据库(JDBC)、文本配置源(如INI和属性文件等) 。如果默认的 Realm 不能满足需求,你还可以插入自定义的Realm 数据源进行实现。