原博客地址: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)退出

最新文章

  1. 黄聪:日租VPS中FileZilla_Server配置方法
  2. location.href参数丢失
  3. Odoo 中group domain的优化应用
  4. (function($){}) 和$(function(){}) 和$(function($){}) 区别
  5. [转]几种常见SQL分页方式
  6. [Mon Feb 10 15:21:06 2014] [notice] child pid 7101 exit signal File size limit exceeded (25)
  7. 管理TEMP数据
  8. c语言-三字符组
  9. 初学python之路-day07-数据类型总结
  10. C语言复习5_调试
  11. 大数据技术 - MapReduce 应用的配置和单元测试
  12. mssql sqlserver 模拟for循环的写法
  13. 剑指offer(30)连续子数组和的最大值
  14. 《ERP系统修正数据的sql文件》
  15. 51nod蜥蜴与地下室(1498)(暴力搜索)
  16. iOS中Date和NString的相互转换
  17. 企业服务的3种模式:On-Premise、SaaS、Mixed,该选哪种?--创业邦
  18. flot中文详解
  19. 【中文同义词近义词】词向量 vs 同义词近义词库
  20. linux下的常用指令

热门文章

  1. Visual C++ 连连看游戏源代码
  2. [oldboy-django][1初始django]web框架本质 + django框架 + ajax
  3. Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime
  4. Summary—【base】(CSS)
  5. BZOJ 1051:[HAOI2006]受欢迎的牛(强连通分量)
  6. Java Socket实战之三 传输对象
  7. 【CCF】除法 树状数组
  8. LESS CSS使用方法 , CSS也能跟JS一样玩
  9. Nginx + tomcat 实现简单集群(基于反向代理方式)
  10. Intelli IDEA快捷键(配合IdeaVim)