Shiro系列(二)--- Shiro的架构

继续我们shiro系列博客相关的学习笔记,各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

来一张官方图片:

可以看到,平时我们应用只与Subject打交道就可以了,而SecurityManager是背后默默付出的人,比如Subject的管理、认证、授权等都有SecurityManager来完成,需要的数据由Realm来加载。对于Subject、SecurityManager、Realm的介绍如下:

Subject

通常指安全领域里的“当前执行用户”

Subject的实例都会(也是必须)绑定一个SecurityManager,对Subject的操作会转为Subject与SecurityManager之间的交互。

SecurityManager

SecurityManager是Shiro架构的核心,起协调内部各组件的作用。同样也管理Shiro的所有用户,且负责进行认证和授权、及会话、缓存的管理,通常开发人员只需要使用Subject。

Realms

可以认为是安全实体数据源,即用于获取安全实体的,Shiro 从 Realm 获取安全数据(如用户、角色、权限),就是说 SecurityManager 要验证用户身份,那么它需要从 Realm 获取相应的用户进行比较以确定用户身份是否合法;也需要从 Realm 得到用户相应的角色 / 权限进行验证用户是否能进行操作;可以把 Realm 看成 DataSource,即安全数据源 ,它封装了数据源的细节,并在Shiro需要时提供相关数据,可以是 JDBC 实现,也可以是 LDAP 实现,或者内存实现等等。配置Shiro时,必须至少得有一个Realm以用于认证(和/或)授权。在SecurityManager中可以配置Realm,至少得有一个。

更详细的架构如下:

 对上面的主要组件说明如下:

Authenticator

认证器,Authenticator是用于执行用户的认证行为的组件,当用户登录时,登录的逻辑操作由Authenticator执行。Authenticator知道如何与存储用户/帐号信息的一个或多个Realms协作。从这些Realms获取的数据用于验证用户的真实身份。

如果配置了不止一个Realm,其需要认证策略AuthenticationStrategy来决定什么样的条件下认证会成功或失败(比如,如果一个realm的数据认证成功而其他的却失败了,能算是认证通过吗?还是必须所有的都认证成功?还是只要一个就可以?)。

Authorizer

授权器,或者访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能,最终决定用户是否被允许做什么。和Authenticator一样, Authorizer也会与底层的数据源交互来获取角色与权限信息,从而准确控制用户的行为。

SessionManager

SessionManager可以创建用户会话(Session)维护其生命周期、管理主体与应用之间交互的数据并在所有环境中提供了强大的用户体验。

SessionDAO

SessionDAO替SessionManager执行会话的存储操作(CRUD)。任何的数据存储都可以接入到会话管理中。

CacheManager

缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能。

Cryptography

密码模块,Shiro 提供了一些常见的加密组件用于如密码加密 / 解密的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值