1.Shiro源码分析---FilterChain创建过程
2.Shiro的Subject创建的内部流程
3.Shiro的简介
Shiro源码分析---FilterChain创建过程
在Shiro框架中,无论是进行认证还是权限控制,都依赖于过滤器的配置与应用。在实际开发中,可能需要配置多个过滤器,但每个请求所经过的主力抱团指标源码过滤器组合却因请求不同而异。因此,理解一个请求会通过哪些过滤器,对于熟练使用Shiro至关重要。本文将详细解析请求通过的过滤器创建过程。
Shiro框架通过`org.apache.shiro.web.filter.mgt.FilterChainResolver`接口定义了如何确定一个请求应经过哪些过滤器。接口中的唯一方法`getChain`负责查找并组装一个过滤器链(FilterChain),该链包含了请求处理过程中所应用的所有过滤器。`FilterChain`是一个熟知的概念,尤其是对于Servlet开发人员来说,它在日常工作中常见。而`FilterChainResolver`仅是武神世纪公司源码一个接口,Shiro提供了默认实现类`org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver`,该实现类利用请求路径来匹配相应的过滤器。
在深入理解PathMatchingFilterChainResolver的源码前,先来看看FilterChainManager是如何管理和创建FilterChain的。Shiro提供了一个默认的FilterChainManager实现类`org.apache.shiro.web.filter.mgt.DefaultFilterChainManager`。其关键方法`createChain`在系统启动时被调用,用于创建各个FilterChain。以配置示例`/static/**、/formfilterlogin,/role`为例,`chainName`与`chainDefinition`分别代表了需要管理的FilterChain名称与定义。
了解了FilterChainManager的创建与管理机制后,接下来关注FilterChainResolver如何确定请求所需过滤器链。在`DefaultFilterChainManager.proxy`方法中,`NamedFilterList`的实现类`org.apache.shiro.web.filter.mgt.SimpleNamedFilterList`被调用,此步骤是先知副图源码确定过滤器链的关键环节。
至此,Shiro框架中FilterChain创建过程已全面解析完成。如有任何错误或需要进一步讨论的问题,欢迎指正。感谢阅读,期待更多的技术交流。
Shiro的Subject创建的内部流程
在使用Shiro框架进行编程时,我们通常会调用Subject对象的login()方法来实现认证过程。然而,当我们查看Subject接口的定义时,会发现login()方法实际上只是声明了功能,而没有具体的实现。那么,当我们在代码中调用Subject.login()时,实际执行的是哪个类的功能呢?接下来,我们将探索Shiro Subject创建的TB源码库内部流程。
首先,我们查看SubjectUtils类中的getSubject方法,这是用于从当前线程中获取或创建Subject对象的入口。通过调用Subject内部的Builder设计模式,我们能够创建一个Subject实例。然后,我们将深入Subject内部,了解其内部结构。Subject是一个接口,而Builder类是其内部的静态类,用于构建Subject实例。
在Subject的内部,我们可以看到Builder类与SecurityManager之间的关系。最终,SecurityManager负责创建Subject实例的工作。然而,大咖娱乐源码SecurityManager接口自身也是一个接口,这意味着它只是声明了一个抽象的创建Subject的逻辑,而实际的实现取决于具体的SecurityManager类。
如果使用的是默认的构造方法Build(),那么Subject实例的创建逻辑将依赖于SecurityUtils.getSecurityManager()方法。通过进一步分析源代码,我们可以得知SecurityManager的具体实例类型是由Shiro配置文件(如shiro.ini)中的配置决定的。如果没有自定义配置,那么Shiro将使用默认的DefaultSecurityManager类。
SecurityManager的继承结构复杂且功能多样,其最终的实现细节在DefaultSecurityManager类中。我们可以通过分析DefaultSecurityManager.createSubject(SubjectContext subjectContext)方法的源代码,来了解Subject实例是如何被创建的。在实现该方法的过程中,DefaultSecurityManager会调用其内部的SubjectFactory类来创建Subject实例。
在DefaultSecurityManager的构造方法中,我们可以看到SubjectFactory的类型是DefaultSubjectFactory。接下来,我们继续追踪到DefaultSecurityManager的doCreateSubject()方法,以及其中的createSubject()方法所在的DelegatingSubject类。最终,Subject实例被构建为DelegatingSubject,其中Delegate表示委托的概念。
至此,我们已经清晰地了解了Subject实例的创建过程。现在,让我们继续探索Subject.login()方法的实现。在实际执行中,Subject.login()方法最终会调用DelegatingSubject.login()方法来完成认证过程。
综上所述,Shiro的Subject创建内部流程涉及从当前线程获取或创建Subject,通过Builder设计模式构建实例,由SecurityManager实现创建逻辑,最终在DefaultSecurityManager类中完成Subject实例的创建,以及通过DelegatingSubject类实现认证功能。这一系列过程确保了Shiro在认证和授权方面的高效和灵活。
Shiro的简介
在之前的学习中,我未记录Shiro的相关笔记,现在决定补全这部分内容。虽然之前写过一篇基础介绍,但感觉总结不够全面。
Shiro作为当前热门的安全框架,其实质是权限管理工具,主要负责用户对系统资源的访问控制。例如,访问路径"/Admin/UserList"如果没有权限管理,任何人都能访问,这就构成未授权访问。
Shiro的核心架构可以参考官网提供的架构图,主要包括Subject(代表用户或应用)、SecurityManager(负责认证和授权的中介)、Authenticator(身份认证)、Authorizer(授权决策)、Realm(数据源,获取用户信息)、SessionManager(会话管理)和SessionDAO(会话存储)等组件。
认证过程中,用户通过身份信息(Principal,如用户名)和凭据信息(Credential,如密码)进行登录。Shiro将这些信息封装成Token,通过安全管理器,调用Authenticator进行身份验证。Realm从数据库获取用户信息进行比对,验证通过后进入授权环节。
配置方面,shiro.ini文件定义了初始的用户名和密码,与其他框架集成时会用到ShiroConfig。测试代码演示了认证流程的各个环节。
Shiro的认证源码分析深入到了各个方法,包括认证、授权、以及如何从Token中提取用户名和密码进行比对。在Springboot整合Shiro时,涉及创建ShiroFilter、安全管理器、自定义Realm以及配置权限访问规则。
绕过机制方面,Springboot版本和Shiro版本的搭配会影响绕过漏洞的复现。在Shiro配置中,绕过行为通过路径匹配进行控制。在绕过漏洞的分析中,可以看到Spring和Shiro在处理请求路径时的差异,导致权限控制的失效。
关于更多Shiro绕过漏洞的详细内容,可以参考nice0e3师傅的文章,链接在这里:[tttang.com/archive/...]
2024-11-20 19:041928人浏览
2024-11-20 19:011975人浏览
2024-11-20 18:092917人浏览
2024-11-20 17:582074人浏览
2024-11-20 17:191346人浏览
2024-11-20 16:511733人浏览
1.过年宅在家玩什么2.国际跳棋游戏源码3.唐·埃斯特利奇IBM PC创造历史4.培训班结课祝福语过年宅在家玩什么 导语辛苦工作了一年终于能在过年期间好好休息了,最快乐的日子莫过于与家人一起玩乐,
南投仁愛鄉力行產業道路37.7公里處,今2)天上午8點多發生土石坍方,雙向交通中斷情形,相關人員第一時間,抵達現場進行交通管制,無奈現場下起大雨,土石不斷滑落,機具也無法運作,目前車道暫停開放,呼籲民
近日天氣相當不穩定,中央氣象署預估未來一週將會「時雨時晴到端午」,週一3日)雨勢稍微緩和,不過週二4日)開始水氣又逐漸增加,降雨機率漸漸提高,到了週三5日)至端午節都呈現水氣較多、多雲偶雨有時晴的天氣