2017.2.7 开涛shiro教程-第六章-Realm及相关对象(四)
2024-09-04 10:55:25
原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398
根据下载的pdf学习。
第六章 Realm及相关对象(四)
1.Subject的代码结构
Subject是shiro的核心,基本所有身份验证、授权都是通过Subject完成的。
public interface Subject {
//身份信息获取
Object getPrincipal(); //Primary Principal
PrincipalCollection getPrincipals(); // PrincipalCollection //身份验证
void login(AuthenticationToken token) throws AuthenticationException;
boolean isAuthenticated();
boolean isRemembered(); //角色授权认证
boolean hasRole(String roleIdentifier);
boolean[] hasRoles(List<String> roleIdentifiers);
boolean hasAllRoles(Collection<String> roleIdentifiers);
void checkRole(String roleIdentifier) throws AuthorizationException;
void checkRoles(Collection<String> roleIdentifiers) throws AuthorizationException;
void checkRoles(String... roleIdentifiers) throws AuthorizationException; //权限授权验证
boolean isPermitted(String permission);
boolean isPermitted(Permission permission);
boolean[] isPermitted(String... permissions);
boolean[] isPermitted(List<Permission> permissions);
boolean isPermittedAll(String... permissions);
boolean isPermittedAll(Collection<Permission> permissions);
void checkPermission(String permission) throws AuthorizationException;
void checkPermission(Permission permission) throws AuthorizationException;
void checkPermissions(String... permissions) throws AuthorizationException;
void checkPermissions(Collection<Permission> permissions) throws AuthorizationException; //会话
Session getSession(); //相当于 getSession(true)
Session getSession(boolean create); //退出
void logout(); ....
//其他略
}
还有两个是:RunAs和多线程。代码里省掉了,因为当时我不知道是干嘛的。就打了...
2.Subject的使用
(1)Subject的创建
一般不用自己创建,直接通过SecurityUtils.getSubject() 获取即可。
public static Subject getSubject() {
Subject subject = ThreadContext.getSubject();// 先判定当前线程是否绑定了Subject
if (subject == null) {
subject = (new Subject.Builder()).buildSubject(); //如果没有绑定就通过Builder绑定,并且返回
ThreadContext.bind(subject);
}
return subject;
}
(2)自定义创建Subject
创建完成后,再自己绑定到当前线程即可。
new Subject.Builder().principals(身份).authenticated(true/false).buildSubject();
3.Subject的基本使用
(1)身份验证(login)
(2)授权(hasRole*/isPermitted*或 checkRole*/checkPermission*)
(3)将相应的数据存储到会话(Session)
(4)切换身份(RunAs)/多线程身份传播
(5)退出
最新文章
- 黄聪:日租VPS中FileZilla_Server配置方法
- location.href参数丢失
- Odoo 中group domain的优化应用
- (function($){}) 和$(function(){}) 和$(function($){}) 区别
- [转]几种常见SQL分页方式
- [Mon Feb 10 15:21:06 2014] [notice] child pid 7101 exit signal File size limit exceeded (25)
- 管理TEMP数据
- c语言-三字符组
- 初学python之路-day07-数据类型总结
- C语言复习5_调试
- 大数据技术 - MapReduce 应用的配置和单元测试
- mssql sqlserver 模拟for循环的写法
- 剑指offer(30)连续子数组和的最大值
- 《ERP系统修正数据的sql文件》
- 51nod蜥蜴与地下室(1498)(暴力搜索)
- iOS中Date和NString的相互转换
- 企业服务的3种模式:On-Premise、SaaS、Mixed,该选哪种?--创业邦
- flot中文详解
- 【中文同义词近义词】词向量 vs 同义词近义词库
- linux下的常用指令
热门文章
- Visual C++ 连连看游戏源代码
- [oldboy-django][1初始django]web框架本质 + django框架 + ajax
- Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime
- Summary—【base】(CSS)
- BZOJ 1051:[HAOI2006]受欢迎的牛(强连通分量)
- Java Socket实战之三 传输对象
- 【CCF】除法 树状数组
- LESS CSS使用方法 , CSS也能跟JS一样玩
- Nginx + tomcat 实现简单集群(基于反向代理方式)
- Intelli IDEA快捷键(配合IdeaVim)