shiro概述(一)架构

一、shiro介绍:

1、简介:Shiro是Apache下的一个开源项目。属于轻量级框架,比SpringSecurity简单。

2、外部架构:从外部来看 Shiro ,即从应用程序角度的来看如何使用 Shiro

可以看到应用代码直接交互的对象是 Subject,也就是说 Shiro 的对外 API核心就是 Subject;shiro的三大主要功能模块:

(1)Subject  :主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject 都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
 (2)SecurityManager : 安全管理器;即所有与安全有关的操作都会与SecurityManager 交互;且它管理着所有Subject;可以看出它是Shiro 的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;
(3)Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。

可以看出,Shiro 不提供维护用户 / 权限,而是通过 Realm 让开发人员自己注入。最简单的一个 Shiro 应用:应用代码通过 Subject 来进行认证和授权,而 Subject 又委托给 SecurityManager;我们需要给 Shiro 的 SecurityManager 注入 Realm,从而让 SecurityManager 能得到合法的用户及其权限进行判断。

3、内部架构:

(1)subject    主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。
(2)securityManager    安全管理器,主体进行认证和授权都是通过securityManager进行。securityManager是一个集合,真正做事的不是securityManager而是它里面的东西。
(3)authenticator    认证器,主体进行认证最终通过authenticator进行的。
(4)authorizer    授权器,主体进行授权最终通过authorizer进行的。
(5)sessionManage    web应用中一般是用web容器(中间件tomcat)对session进行管理,shiro也提供一套session管理的方式。shiro不仅仅可以用于web管理也可以用于cs管理,所以他不用web容器的session管理。
(6)SessionDao    通过SessionDao管理session数据,针对个性化的session数据存储需要使用sessionDao(如果用tomcat管理session就不用SessionDao,如果要分布式的统一管理session就要用到SessionDao)。
(7)cache Manager    缓存管理器,主要对session和授权数据进行缓存(权限管理框架主要就是对认证和授权进行管理,session是在服务器缓存中的),比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理(redis是缓存框架)。
(8)realm    域,领域,相当于数据源,通过realm存取认证、授权相关数据(原来是通过数据库取的)。注意:authenticator认证器和authorizer授权器调用realm中存储授权和认证的数据和逻辑。
(9)cryptography    密码管理,比如md5加密,提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。比如 md5散列算法(md5只有加密没有解密)。

二、细分功能:

shiro可以帮我们完成认证、授权、加密、会话管理、与web集成、缓存等。

注意:shiro不会去维护用户、维护权限,这些需要自行设计/提供,然后通过相应的接口注入给shiro即可。

1、Authentication:身份认证/登录(账号密码验证),验证用户是不是拥有相应的身份。

2、Authorization:授权,即角色或者权限验证,验证某个已认证的用户是否拥有某个权限。

3、Session Manager:会话管理,即用户登陆后就是一次会话,在没有退出之前,它的所有信息都在会话中。会话可以是普通javaSE环境的,也可以是如web环境的。

4、Cryptography:加密,密码加密等。

5、Web Support:Web支持,集成Web环境。

6、 Caching:缓存,用户信息、角色、权限等缓存到如redis等缓存中,不用每次都去查,提高效率。

7、Concurrency:多线程并发验证,在一个线程中开启另一个线程,可以把权限自动传播过去。

8、 Testing:提供测试支持;

9、Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问。

10、Remember Me:记住我,这是个非常常见的功能,登录后,下次再来的话不用登录了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值