shiro 他的本质就是一些列的dofilter 。在过滤的过程会创建subject 。
subjectContext 相当于内部维护了许多的map,然后维护用户的各种信息。
doFilter----->SecurityManager---->subjectContext----->创建subject ,
然后通过解析,赋值,解析赋值,SecurityManager,Session,登陆信息最后通过。
通过这个逻辑突然有一点明白该代码到底时干什么用的了。
ThreadContext的说明
ThreadContext类通过key/value 键值对为每一个线程提供绑定以及解绑对象的方法。
ThreadContext一共有四个对象
- 用来记录日志的,
- 用来记录SecurityManger 对象的key
- 用来记录subject_key 对向对应的key
- 最后一个ThreadLocal
通过着四行代码,我们大概知道Threadcontext对象的最用了。ThreadCntext 实际上就是通过每个线程的ThreadLocalMap 来存储自己的SecuritManager对象以及Subject .因为用到了ThreadLocal 。因此线程时安全的。
getResources方法
该方法用于返回当前线程存储在ThreadLocalMap中的HashMap对象,正常的话,这个hashMp对象中应该存放Security以及Suject兑现给的键值对。
setResources方法
可用于设置新的map对象放到Resources 也就是ThreadLoacal对象中去,
最后总结一张ThreadContext类和线程池的关系