Shiro作为轻量级安全框架,相比Spring Security更简单易学,都是为了让我们简便对于
RBAC级别的权限控制的开发。
1,什么是Shiro
业会话管理和加密。
非必须如此。框架应尽可能掩盖复杂性,并提供简洁直观的API,以简化开发人员确保其应用程
序安全的工作。
2,Shiro能干什么
对于我们而言,Shiro的功能在于以下:
- 验证用户身份(最常用的一点)
- 验证、分配用户权限,控制用户使用资源
- 在任何环境下,都可以使用session来获取对象信息,无论是否存在web容器
- 启用SSO单点登陆功能
- 使用灵活,不强制依赖框架,可以轻易的与Spring框架融合,也可以单独依靠INI文件运行
- 等等...
3,Shiro的功能区域
Shiro内部各功能分布图
其中Shiro中最重要的四大功能,认证、授权、会话管理、密码加密。
1,认证Authentication:即用户登陆时候的验证用户名密码是否正确。
2,授权Authorization:即对用户的权利进行分配,规定用户可以访问什么资源。
3,会话管理SessionManagement:即对于当前会话进行管理,例如查看在线和强制下线。
4,密码学Cryptography:即使用加密算法保持数据安全,同时提供了方便快捷的加密方式
这里要注意区分Authentication和Authorization的区别,前者是判定用户是否能登陆,后者
属于判定用户是否有权限访问资源,并不是一个概念。
4,Shiro的详细架构
Shiro中有很多模块,基本上离不开这三个模块:Subject、SecurityManager、Realm
1,Subject:此对象可以比作Shiro的控制入口的核心API,开发者只要拿到他即可获取用
户凭证、是否登陆、判定角色等各种功能。
2,SecurityManager:可以把他比作是一个大容器,是Shiro的核心,Authenticator、
Authorizer、Realm、SubjectFactory都是要注入SecurityManager中,作为老大哥,管理一切
的模块,官方比作"伞形对象",协调其托管组件,确保所有模块一起平稳运行。
3,Realm:Realm作为Shiro读取用户、权限数据的通道,其连接可以是JDBC、INI、
LDAP等等,Shiro不关心获取数据的方式,只要由开发者完成对于数据的获取,Shiro就可以自
动的从DB读取数据进行验证。
4,Authenticator:身份认证,用户登陆时候会调用Authenticator的实现类进行认证,
Authenticator会调用相应的Realm进行认证,此时Realm可以是一个也可以是多个。
当有多个Realm时候,会涉及到AuthenticatorStraegy来进行调配,官方源码写到
attempt must be successful for all realms, only 1 or more realms, no realms, etc.
也就是说Realm配置必须要全部认证成功就算成功。
5,Authorizer:权限认证,负责对于已登陆的用户的权限访问控制,协调资源的访问控制
权限。
6,SessionManager:会话管理器,Shiro提供的强大的会话管理器,其中内置的
SessionDAO可以实现对于session的CRUD操作,还可以获取目前活跃的Session状态。
7,CacheManager:作为缓存管理器,可以提高性能,一般对于session进行缓存,可以
显著提高性能。
8,Realm:即Shiro认证组件与DB的连接器,它为Authenicator或Authorizer提供数据来
源,从Realm配置数据源(数据源可以多种形式,逻辑由自己实现,增加了灵活性),从中查找相
应数据,也可以配置多个Realm。
以上就是Shiro的初步概念,以及各个部件分别具有的功能,下一节继续学习Shiro的认证具体
流程,以及结合源码解析分析。