设为首页 收藏本站
查看: 733|回复: 0

[经验分享] Apache Shiro V1.2 SecurityUtils与SecurityManager的关系以及Subject的创建

[复制链接]

尚未签到

发表于 2017-1-14 12:25:10 | 显示全部楼层 |阅读模式
SecurityUtils是一个抽象的工具类,提供了 SecurityManager 实例的保存和获取的方法,以及创建Subject的方法。


一、SecurityUtils中获取subject的方法
SecurityUtils提供了 getSecurityManager()和setSecurityManager外,还有个特别的方法 getSubject(),这是获取subject的最有效的途径。


  • public static Subject getSubject() {
  • Subject subject = ThreadContext.getSubject();
  • if (subject == null) {
  • subject = (new Subject.Builder()).buildSubject();
  • ThreadContext.bind(subject);
  • }
  • return subject;
  • }



实际上,创建的subject的工作还是由SecurityManager 来完成的(DefaultSecurityManager的createSubject()方法)。
Buidler是在 Subject的内类,在Buidler中通过SecurityUtils 获取到了SecurityManager,调用buildSubject()。
在buildSubject()中调用了securityManager.createSubject()方法,完成subject创建的。


二、最终subject创建的代码


DefaultSecurityManager 实例化的时候,生成了SubjectFactory子类DefaultSubjectFactory 实例的属性。
DefaultSecurityManager的
createSubject()方法 调用
DefaultSubjectFactory 的 createSubject()方法最终完成了subject 的创建:

下面是DefaultSubjectFactory 中createSubject()方法的代码:

  • public Subject createSubject(SubjectContext context) {
  • SecurityManager securityManager = context.resolveSecurityManager();
  • Session session = context.resolveSession();
  • boolean sessionCreationEnabled = context.isSessionCreationEnabled();
  • PrincipalCollection principals = context.resolvePrincipals();
  • boolean authenticated = context.resolveAuthenticated();
  • String host = context.resolveHost();

  • return new DelegatingSubject(principals, authenticated, host, session, sessionCreationEnabled, securityManager);
  • }
可见,subject的最终实例是DelegatingSubject的实例,并且包含host,authenticated,principals,securityManager等丰富的信息。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-328378-1-1.html 上篇帖子: 配置apache 使得局域网内的其他电脑可以访问的简单方法 下篇帖子: 使用org.apache.lucene创建和查询索引核心代码详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表