一、使用特性介绍
在开始写代码之前,首要了解Shiro的设计特性,这样方便理解和使用Shiro提供的Api和类。
在概念层,Shiro 架构包含三个主要的设计理念:Subject,SecurityManager和 Realm。下面的图展示了这些组件如何相互作用。
- Subject:代表当前用户,Subject 可以是一个人,但也可以是第三方服务、守护进程帐户、时钟守护任务或者其它--当前和软件交互的任何事件。
- SecurityManager:管理所有Subject,SecurityManager 是 Shiro 架构的核心,配合内部安全组件共同组成安全伞。
- Realms: 用于进行权限信息的验证,我们自己实现。Realm 本质上是一个特定的安全 DAO:它封装与数据源连接的细节,得到Shiro 所需的相关的数据。在配置 Shiro 的时候,你必须指定至少一个Realm 来实现认证(authentication)和/或授权(authorization)。
也就是Subject封装用户信息交给SecurityManager进行管理,SecurityManager的验证是通过Realm或者Realm有派生类来进行验证。
也就是说在Realms的派生类去做Authentication 和 Authorization的操作。其中 Authentication 是用来验证用户身份,Authorization 是授权访问控制,用于对用户进行的操作授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。
二、Shiro关键类介绍
SecurityManager、SecurityUtils、Subject、Realms、ShiroFilterFactoryBean
- 2.1、首先来看SecurityManager源码
SecurityManager 它是一个接口,定义着下面三个函数:
//登录
Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException;
//注消
Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException;
//创建Subject
Subject createSubject(SubjectContext context);
createSubject
可以看出真正的登录、注消是由SecurityManager的实现类来做的。
配制流源原理
时间关系先上代码:后面再解释:
链接:https://pan.baidu.com/s/1DruN2Gw2tQrAuJ_N2Qjy0Q 密码:mcrf