一、权限基础
两个基本的概念
安全实体:就是被权限系统保护的对象,比如工资数据。
权限:就是需要被校验的行为,比如查看、修改等。
分配权限:
把对某些安全实体的某些权限分配给某些人员。
是向数据库里面添加数据、或是维护数据的过程
权限验证(权限匹配):
判断某个人员或程序对某个安全实体是否拥有某个或某些权限。
从数据库中获取相应数据进行匹配的过程。
权限的继承性:如果多个安全实体存在包含关系,而某个安全实体没有权限限制,则它会继承包含它的安全实体的相应权限。
权限的最近匹配原则:如果多个安全实体存在包含关系,而某个安全实体没有权限限制,那么它会向上寻找并匹配相应权限限制,直到找到一个离这个安全实体最近的拥有相应权限限制的安全实体为止。如果把整个层次结构都寻找完了都没有匹配到相应权限限制的话,那就说明所有人对这个安全实体都拥有这个相应的权限限制。
二、Shiro 简介
Apache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能
Shiro 能做什么
1、认证:验证用户的身份
2、授权:对用户执行访问控制:判断用户是否被允许做某事
3、会话管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。
4、加密:以更简洁易用的方式使用加密功能,保护或隐藏数据防止被偷窥
5、Realms:聚集一个或多个用户安全数据的数据源
6、单点登录(SSO)功能。
7、为没有关联到登录的用户启用 “Remember Me“ 服务
三、Shiro的主要功能
Shiro 的四大核心部分
Authentication(身份验证):简称为“登录”,即证明用户是谁。
Authorization(授权):访问控制的过程,即决定是否有权限去访问受保护的资源。
Session Management(会话管理):管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography(加密):通过使用加密算法保持数据安全
shiro 还提供以下扩展:
Web Support:主要针对web应用提供一些常用功能。
Caching:缓存可以使应用程序运行更有效率。
Concurrency:多线程相关功能。
Testing:帮助我们进行测试相关功能
“Run As”:一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
” Remember Me ” :记住用户身份,提供类似购物车功能。
四、Shiro 架构 3 个核心组件
- Subject :正与系统进行交互的人,或某一个第三方服务。所有 Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。
- SecurityManager:Shiro 架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务。当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。
- Realms :本质上是一个特定安全的 DAO。当配置 Shiro 时,必须指定至少一个 Realm 用来进行身份验证和/或授权。Shiro 提供了多种可用的 Realms 来获取安全相关的数据。如关系数据库(JDBC),INI 及属性文件等。可以定义自己 Realm 实现来代表自定义的数据源。
五、Shiro 架构
Authenticator :执行对用户的身份验证(登录)的组件。Authenticator 从一个或多个 Realm 中获得数据以验证用户的身份。
若存在多个realm,则接口 AuthenticationStrategy 会确定什么样算是验证成功(例如,如果一个 Realm 成功,而其他的均失败,是否登录成功)。
Authorizer :验证用户能否访问应用中的受保护的资源
SessionManager :可在任何应用或架构层一致地使用 Session API
SessionDAO:SessionManager 执行 Session 持久化(CRUD)操作。
CacheManager :对 Shiro 组件提供缓存支持。
Cryptography:Shiro 的 API 大幅度简化 Java API 中繁琐的密码加密
Realms:Shiro 通过 Realms 来获取相应的安全数据