shiro 的subject 以及Context 对象的具体的含义。

shiro 他的本质就是一些列的dofilter 。在过滤的过程会创建subject 。

subjectContext 相当于内部维护了许多的map,然后维护用户的各种信息。

doFilter----->SecurityManager---->subjectContext----->创建subject ,

然后通过解析,赋值,解析赋值,SecurityManager,Session,登陆信息最后通过。

通过这个逻辑突然有一点明白该代码到底时干什么用的了。

ThreadContext的说明

ThreadContext类通过key/value 键值对为每一个线程提供绑定以及解绑对象的方法。

ThreadContext一共有四个对象

  1. 用来记录日志的,
  2. 用来记录SecurityManger 对象的key 
  3. 用来记录subject_key 对向对应的key 
  4. 最后一个ThreadLocal 

通过着四行代码,我们大概知道Threadcontext对象的最用了。ThreadCntext 实际上就是通过每个线程的ThreadLocalMap 来存储自己的SecuritManager对象以及Subject .因为用到了ThreadLocal 。因此线程时安全的。

getResources方法

 该方法用于返回当前线程存储在ThreadLocalMap中的HashMap对象,正常的话,这个hashMp对象中应该存放Security以及Suject兑现给的键值对。

setResources方法

可用于设置新的map对象放到Resources 也就是ThreadLoacal对象中去,

最后总结一张ThreadContext类和线程池的关系

原文地址:https://www.cnblogs.com/dousil/p/13199850.html