Shiro的学习(一) -------了解Shiro的架构

1、初识Shiro

Apache Shiro是java的一个开源的安全框架。经常会拿它和Spring的Security来对比。那就说一下它俩的区别:
   Shiro:在保持功能强大的同时,简单性和灵活性方面有优势。
   Security:是一个健壮的框架。但是相比Shiro有些复杂。如果平时没有特殊的功能Shiro足够用,上手比较容易。 
Shiro可以帮助我们完成:认证、授权、加密、回话管理、与web集成、缓存等。

shiro的Api如下图:

这里写图片描述
Authentication:身份认证/登陆,验证用户是否有相应的身份。
Authorzation:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情。常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有权限。
Session Management:会话管理。用户登陆后就是一次会话。在没有退出之前,它的所有信息都在会话中;会话可以是普通的javaSE环境,也可以是WEB环境。
Cryptography:加密,保护数据的安全性,密码存到数据库都是密文的。
WebSupport:Web支持。
Caching:缓存,比如用户登陆后,其用户信息,拥有的角色/权限不必每次去查,可以提高效率。
Concurrency:shiro支持多线程应用的并发验证。比如在一个线程中开启另一个线程,能自动把权限传过去。
Testing:提供测试支持。
Run As:允许一个用户假装为另一个用户的身份进行访问。
Remember Me:记住我,这是大家常见的功能。一次登录后,下次再来的话不用登录了。
注意:shiro不会去维护用户和权限,这些需要我们自己去设计,然后通过相应的接口注入给shiro。

2、从内外结构认识Shiro

一个好的框架,从外部看,应该具有非常简单易于使用的API;从内部看的话,其应该有一个可扩展的架构,即非常容易插入用户自定义的实现,因为任何框架都不能满足所有需求。

2.1、先从外部看shiro,即从应用程序角度来观察如何使用Shiro完成工作。
这里写图片描述

每个API的含义:
Subject:主体。代表了当前“用户”,而这个用户,并不一定是一个具体的人,与当前应用交互的任何东西都是Subject,像网络爬虫,机器人等 。是一个抽象的概念。所有的Subject绑定到SecurityManager,与Subject所有交互都会委托给SecurityManager。SecurityManager才是真正的执行者。
SecurityManager:安全管理器。所有与安全有关的操作都会与SecurityManager交互,并且它管理者所有的Subject。可以看出它是Shro的核心。它负责与后边的组件进行交互,相当于在springMvc中DispatcherServelet的地位。
Realm:域。Shiro从Realm获取安全数据。SecuriityManager要验证用户的身份,需要从Realm中获取相应用户的(身份,角色,权限)信息来比较进行确定用户的身份是否合法。可以将它看成DataSource,即安全数据源。

一个简单的Shiro应用:
1.应用代码通过Subject进行认证和授权,而Subject又委托给SecurityManager。
2.我们需要给Shiro注入Realm,从而让SecurityManager能够获得合法的用户及其权限进行判断。
2.2、 从内部看一下Shiro
这里写图片描述

这是内部的Shiro架构,接下来学习Shiro的组件。

猜你喜欢

转载自blog.csdn.net/qq_33628614/article/details/79171761