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類和線程池的關系

