目的
代表当前的交互对象,存储相关的信息。是SecurityManager的门面,不直接调用SecurityManager。将其抽象为用户,以符合面向对象原则。
获取Subject流程
- 从当前线程的ThreadLocalMap中获取Subject
- 不存在,则用请求创建出SubjectContext
- 从SubjectContext解析出SessionKey
- 从SubjectContext中解析出权限
- 用SubjectContext创建Subject
- 将Subject保存在Session中
方法
功能
- 认证:登陆
- 授权:
- 检验当前用户的权限
- 检验当前用户的角色
- 主体的信息
- session
- 认证状态
- 是否记住
- 身份信息
- 绑定线程,实质使用了associateWith方法
- execute方法
- associateWith方法
- 切换身份,切换的身份信息存在session中
- runAs() ,切换身份
- releaseRunAs(),退出身份切换并转到以前的身份
相关类
- SubjectThreadState implements ThreadState:用于将线程与当前的Subject绑定、线程其他操作。
- SubjectContext extends map<String,Object>:保存Subject的信息
- static class Subject.Builder:用于对SubjectContext属性赋值操作和创建Subject、SubjectContext