shiro源码分析02 -- SubjectContext

本文深入剖析Shiro框架中Subject构建过程,从SecurityUtils获取Subject机制,到SubjectContext属性组织,直至SubjectFactory构建实现,全面解读Subject创建原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何构建Subejct

上一篇我们讲了Subject这个类,知道了在每一次访问时都会创建一个新的subject,而这个subject会绑定到ThreadContext上,然后通过SecurityUtils在程序的任何地方调用getSubject时都会返回同一个subject。以用户登录时的例子分析源码:

通过查看SecurityUtils源码可以看到,它是通过从ThreadContext上获取Subject,如果存在直接返回,否则通过Subject.Builder().buildSubject()去创建Subject,创建后再将Subject绑定到ThreadContext

 接着通过查看Subject源码发现,其实它是一个interface,其中声明了一个Builder类

 

Builder类中有这么一个方法buildSubject(),它通过shiro核心组件SecurityManager调用createSubject()去创建需要的Subject,其中通过传入参数可以知道,它是使用SubjectContext来构建我们需要的Subject

 

 查看SubjectContext源码可以知道其实它就是一个Map

 DefaultSubjectContext是SubjectContext的实现类,又是MapContext的子类

 而这一系列过程都是为了将构建subject的所有属性都组织到一起,然后传递给一个subjectFactory,用于构建一个subject

在DefaultSecurityManager中,通过doCreateSubject()方法将SubjectContext传递给SubjectFactory

 

通过SubjectFactory构建Subject,返回Subject的实现类DelegatingSubject,以及DelegatingSubject的子类WebDelegatingSubject

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值