第六章: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)及授 ...
随机推荐
- EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。
实现功能:查询单张表Student中返回指定的列 一:数据库表结构: 二:存储过程: USE [AdventureWorksDW] GO /****** Object: StoredProcedure ...
- Java-Web DOM方式解析xml文件
XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...
- Carrying per-request context using the HttpRequestMessage.Properties
In a Web API application, I use Castle Windsor to supply services configured with PerWebRequest life ...
- Maven 创建java Web项目,配置Spring,CXF
1.搭建Maven环境 参考文章 Maven3路程(一)环境搭建 http://www.cnblogs.com/leiOOlei/p/3359561.html Maven3路程(二)Eclipse集成 ...
- 如何制作简单的 3D 打印模型
Hi 大家好! 了解一个方兴未艾,但极为有趣的话题 — 3D 打印 . 为了帮助大家对3D打印有一个初步的感性认识,我在线制作了一款可用于3D打印的model, 大家可以先通过体验这个在线 model ...
- 七、配置ssh keys连通github跟ssh-agent
jenkins+github配置完成后,能够实现在提交pull request或者直接push时,能够将提交的代码拉去一份到服务器本地,并自动merge:但是代码拉去下来了,部署环境的时候却需要输入登 ...
- oracle sqlplus conn 远程连接
- Lazy JSF Primefaces Datatable Pagination
http://www.javacodegeeks.com/2012/04/lazy-jsf-primefaces-datatable.html
- mysql性能优化-慢查询分析、优化索引和配置【转】
一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1) max_connec ...
- FORALL用法小结
本文主要翻译.整理了ORACLE官方文档上有关FORALL的部份内容,不妥之处,还希望多和大家交流. 在发送语句到SQL引擎前,FORALL语句告知PL/SQL 引擎批挷定输入集合.尽管FORALL语 ...