一、Shiro安全框架-简介和架构
写在前面
最近在看Shrio安全框架,于是记录一下,欢迎大家学习讨论。
1.Shiro简介
1.1.什么是Shiro?
Apache Shiro是一个强大灵活的开源安全框架,提供认证、授权、会话管理以及密码加密等功能。
Apache Shiro 首要的目标是易于使用和理解。安全相关的操作有时很复杂很麻烦,不过这完全没必要,一个安全框架应该尽可能隐藏这其中的复杂性并提供一套简洁直观的 API 来简化开发人员在这方面的工作。
1.2.Shiro的功能
Shiro的功能如上图所示:
Shiro的主要功能就是所谓的“应用安全的四大基础” ——认证,授权,会话管理与密码加密:
- Authentication(认证):就是我们常说的“登录”,永安里验证用户身份。
- Authorization(授权):访问控制,用于验证已经认证通过的用户是否拥有某个权限,比如某个用户能访问某些资源资源,不同的身份的用户能访问的资源不一样。
- Session Management(会话管理):管理用户相关的Session,用户的一次登录就是一次会话,在没有退出登录之前,用户的所有信息都存在会话中。
- Cryptography(加密):保证数据的安全性,Shrio内置多种加密方式,比如Base 64和16进制字符串编码和解码,可以非常方便地使用各种加密算法保证数据的安全。
另外Shiro还支持一些其他的特性:
- Web Support(Web支持):Shiro自带的支持Web的API可以很容易地集成到web环境中。
- Caching(缓存):Shiro会将已经登录的用户信息缓存起来,这样就不用每次都去查,提高效率。
- Concurrency(并发性):Shiro的并发功能支持开发多线程的应用。
- Testing(测试):Shiro支持单元测试和集成测试。
- Run As(以…身份运行):允许一个用户使用另外某个用户的身份执行操作,这个功能常用于管理场景中比如“以管理员身份运行”。
- Remember Me(记住我):用户选择“记住我”选项后,后面访问便不需要再登陆,即可以跨会话访问,只在某些特殊情况下才需要强制登录,比如token失效。
2.Shiro的架构
接下来我们通过外部架构和详细架构来看看Shiro安全框架的架构
2.1.外部架构
Shiro的架构主要有三个顶级接口概念:Subject, SecurityManager和Realms,如下图所示:
- Subject(主题):指当前执行的“用户”,但是在Shiro中“用户”不一定特质人,它可以是一个人,也可以是三方服务,也可以是网络爬虫等等,Subject指的是与当前应用正在交互的任何事务。需要注意的是所有的Subject实例都必须绑定到Security Manager,对Subject的操作会转为Subejct和Security Manager之间的交互。
- Security Manager(安全管理器):Security Manager是Shiro架构的核心,它负责管理所有的Subejct,并且协调其他内部组件的相互协作,不过一旦Security Manager配置好后我们便可以不用再去管它,我们只需要操作Subject即可,但是我们需要知道当我们在对Subject进行各种操作的时候,在背后做苦力劳动的却是Security Manager(ps:像不像我们程序员,可怜的崽)。
- Realm(领域):Realm在Shiro和我们的安全数据(用户、角色、权限等信息)之间扮演“桥梁”的角色,当需要用到安全数据的时候,比如进行身份认证或授权的时候,Shiro会从应用配置中的一个或者多个Realm中来查找到对应的用户、角色、权限等信息,我们也可以直接把Realm看作为一个安全数据源,配置Shiro时,必须至少得有一个Realm以用于认证或授权。
2.2.内部结构
下图是Shiro的详细内部结构:
- Subjet:与Shiro交互的实体(用户、三方服务等)。
- Security Manager:Security Manager是Shiro的大脑,它起到协调内部组件之间的作用,并且管理这所有的Shiro用户。
- Authticator:认证器,是用于执行用户的认证行为的组件,当用户登录时,登录的逻辑操作是由Authticator来执行的。
- Authentication Strategy:当有多个Realm的时候,由Authentication Strategy来决定什么样的条件算成功,什么样的条件算失败。
- Authorizer:授权器,用来控制用户的访问权限,最终决定用户是否能访问某个资源。Authorizer也会与底层的数据源交互来获取角色和权限信息。
- Session Manager:会话管理器,可以用来创建用户会话,并且维护其生命周期。
- Session DAO:Session DAO用来帮Session Manager执行会话的存储操作,我们可以通过实现Session DAO来将Session保存在数据库中。
- Cache Manager:缓存管理器,用来创建和管理缓存的数据源实例,数据源一般不会经常改变,这样可以有效提高性能。
- Realm:Realm上面我们已经介绍过了,Shiro在进行认证、授权等操作的时候,都会去一个或者多个Realm中获取安全数据。
- Cryptography:密码模块,Shrio内置多种加密方式,比如Base 64和16进制字符串编码和解码,可以非常方便地使用各种加密算法保证数据的安全。
结语
千山万水总是情,给我点赞行不行,人间自有真情在,一键三连会更帅。初写文章,不善表达,多多包涵,本篇文章到这里就结束了,欢迎大家学习讨论。