第六章:shiro Realm相关对象
Shiro 中的 AuthenticationToken
CredentialsMatcher
对象的doCredentialsMatch
方法对AuthenticationInfo
对象和AuthenticationToken
进行匹配。匹配成功则表示主体(Subject)认证成功,否则表示认证失败。
- public interface AuthenticationToken extends Serializable {
- Object getPrincipal(); //身份
- Object getCredentials(); //凭据
- }
- public interface HostAuthenticationToken extends AuthenticationToken {
- String getHost();// 获取用户“主机”
- }
- public interface RememberMeAuthenticationToken extends AuthenticationToken {
- boolean isRememberMe();// 记住我
- }
UsernamePasswordToken
,用于实现基于用户名/密码主体(Subject)身份认证。UsernamePasswordToken
实现了 RememberMeAuthenticationToken
和 HostAuthenticationToken
,可以实现“记住我”及“主机验证”的支持。Shiro 中的 AuthenticationInfo
AuthenticationInfo
对象中存储的是主体(Subject)的身份认证信息。Shiro会调用CredentialsMatcher
对象的doCredentialsMatch
方法对AuthenticationInfo
对象和AuthenticationToken
进行匹配。匹配成功则表示主体(Subject)认证成功,否则表示认证失败。AuthenticationInfo的继承结构——摘自《跟我学Shiro》
- public interface AuthenticationInfo extends Serializable {
- // 获取用户身份信息
- //每个Realm反回一个AuthenticationInfo ,
- //所有AuthenticationInfo 中的PrincipalCollection 会根据指定规则进行合并
- PrincipalCollection getPrincipals();
- // 获取用户的 凭证信息(credentials),当有多个Realm返回多个AuthenticationInfo 时凭证信息 也会根据指定的规则进行合并
- // Shiro会使用 凭证信息(credentials) 验证用户身份的合法性。
- Object getCredentials();
- }
- public interface MergableAuthenticationInfo extends AuthenticationInfo {
- // 用于合并多个Realm返回的AuthenticationInfo
- void merge(AuthenticationInfo info);
- }
- public interface Account extends AuthenticationInfo, AuthorizationInfo {
- }
- public interface SaltedAuthenticationInfo extends AuthenticationInfo {
- ByteSource getCredentialsSalt();// 获取凭证 信息的 盐
- }
MergableAuthenticationInfo 用于提供在多 Realm 时合并 AuthenticationInfo 的功能,主要合并 Principal、如果是其他的如 credentialsSalt,会用后边的信息覆盖前边的。
SaltedAuthenticationInfo 用于对 凭证 信息加盐。比如 HashedCredentialsMatcher,在验证时会判断AuthenticationInfo 是否是SaltedAuthenticationInfo 子类,来获取盐信息。
Account
不仅继承了AuthenticationInfo
,继承了AuthorizationInfo
,也就是说它不仅包含主体的身份认证信息,还包含了主体的授权信息(角色、权限)。SimpleAccount 是Account
的一个实现。在IniRealm
、PropertiesRealm
这种静态创建帐号信息的场景中使用,这些Realm
直接继承了SimpleAccountRealm
,而SimpleAccountRealm
提供了相关的 API 来动态维护SimpleAccount
;即可以通过这些 API来动态增删改查SimpleAccount
;动态增删改查角色/权限信息。如果您的帐号不是特别多,可以使用这种方式。其他情况一般返回 SimpleAuthenticationInfo 即可。
Shiro 中的 PrincipalCollection
因为我们可以在 Shiro 中同时配置多个 Realm,所以呢身份信息可能就有多个;因此其提供了 PrincipalCollection 用于聚合这些身份信息。
- public interface PrincipalCollection extends Iterable, Serializable {
- Object getPrimaryPrincipal(); //得到主要的身份
- <T> T oneByType(Class<T> type); //根据身份类型获取第一个
- <T> Collection<T> byType(Class<T> type); //根据身份类型获取一组
- List asList(); //转换为 List
- Set asSet(); //转换为 Set
- Collection fromRealm(String realmName); //根据 Realm 名字获取
- Set<String> getRealmNames(); //获取所有身份验证通过的 Realm 名字
- boolean isEmpty(); //判断是否为空
- }
因为PrincipalCollection聚合了多个,此处最需要注意的是getPrimaryPrincipal,如果只有一个Principal那么直接返回即可,如果有多个Principal,则返回第一个(因为内部使用Map存储,所以可以认为是返回任意一个);oneByType / byType根据凭据的类型返回相应的Principal;fromRealm根据Realm名字(每个Principal都与一个Realm关联)获取相应的Principal。
MutablePrincipalCollection是一个可变的PrincipalCollection接口,即提供了如下可变方法:
- public interface MutablePrincipalCollection extends PrincipalCollection {
- void add(Object principal, String realmName); //添加 Realm-Principal 的关联
- void addAll(Collection principals, String realmName); //添加一组 Realm-Principal 的关联
- void addAll(PrincipalCollection principals);//添加 PrincipalCollection
- void clear();//清空
- }
MutablePrincipalCollection
的一个实现 SimplePrincipalCollection
,在多 Realm 时 SimpleAuthenticationInfo 会合并多个 Principal为一个 PrincipalCollection。Shiro 中的 AuthorizationInfo
AuthorizationInfo用于聚合授权信息的:
- public interface AuthorizationInfo extends Serializable {
- Collection<String> getRoles(); //获取角色字符串信息
- Collection<String> getStringPermissions(); //获取权限字符串信息
- Collection<Permission> getObjectPermissions(); //获取 Permission 对象信息
- }
当我们使用 AuthorizingRealm
时,如果身份验证成功,在进行授权时就通过doGetAuthorizationInfo
方法获取角色/权限信息用于授权验证。Shiro 提供了一个实现 SimpleAuthorizationInfo
,大多数时候使用这个即可。
第六章:shiro Realm相关对象的更多相关文章
- 第六章 类(Class) 和对象(Object)
一.笔记导图 二.实例代码: public class PrintCarStatus{ public static void main(String[] args){ int speed; Strin ...
- 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(四)
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第六章 Realm及相关对象(四) 1.Subject的代码结构 ...
- 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(二)
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第六章 Realm及相关对象(二) 1.Authenticatio ...
- 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(一)
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第六章 Realm及相关对象 1.用户.角色.权限的关系 用户和角 ...
- 2017.2.7 开涛shiro教程-第六章-Realm及相关对象(三)
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第六章 Realm及相关对象(三) 1.准备3个Realm MyR ...
- 第六章 Realm及相关对象——《跟我学Shiro》
转发地址:https://www.iteye.com/blog/jinnianshilongnian-2022468 目录贴:跟我学Shiro目录贴 6.1 Realm [2.5 Realm]及[3. ...
- 第十六章 综合实例——《跟我学Shiro》
简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 password varchar 1 ...
- 十六章 综合实例——《跟我学Shiro》
目录贴:跟我学Shiro目录贴 简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 pa ...
- Realm及相关对象(四)
Shiro Realm 1.UserRealm 父类 AuthorizingRealm 将获取 Subject 相关信息分成两步:获取身份验证信息(doGetAuthenticationInfo)及授 ...
随机推荐
- 走迷宫(用队列bfs并输出走的路径)
#include <iostream> #include <stack> #include <string.h> #include <stdio.h> ...
- [maven] 实战笔记 - 构建、打包和安装maven
① 手工构建自己的maven项目 Maven 项目的核心是 pom.xml.POM (Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等 ...
- MS-TEST 批处理执行测试时的资源文件目录问题
What: 使用MS-TEST的 批处理执行它的测试 DLL 时,如: MSTest /testcontainer:C:\David\ADAccountGIT\AdAccountMSTest\ADA ...
- vue语法精简(方便开发查阅)
vue语法精简(方便开发查阅) 指令 特殊的标签和属性 变异方法 事件修饰符 按键修饰符 表单修饰符 生命周期函数 计算属性 监听属性 子组件通过事件向父组件传递信息 在组件上使用v-model 动画 ...
- jeesite快速开发平台(五)----用户-角色-部门-区域-菜单-权限表关系
转自: https://blog.csdn.net/u011781521/article/details/78994904
- JVM知识点精华汇总
本文是学习了<深入理解Java虚拟机>之后的总结,主要内容都来自于书中,也有作者的一些理解.一是为了梳理知识点,归纳总结,二是为了分享交流,如有错误之处还望指出.(本文以jdk1.7的规范 ...
- Java Graphics 2D绘制图片 在Liunx上乱码
绘图的代码工具类 package com.gwzx.framework.captcha; import java.awt.Color; import java.awt.Font; import jav ...
- Python 2.75升级3.6.3
https://blog.csdn.net/wwwdaan5com/article/details/78218277 Centos 7 默认yum安装python 是2.7.5, (网上看了很多升级都 ...
- 【324】Python 库说明(安装&卸载)
参考:Python_安装官方whl包和tar.gz包 参考:Unofficial Windows Binaries for Python Extension Packages 参考:PyPI 参考:直 ...
- 对List集合进行排序
一.说明 使用Collections工具类的sort方法对list进行排序 新建比较器Comparator 二.代码 排序: import java.util.ArrayList; import ja ...