1.Shiro源码分析---FilterChain创建过程
2.Shiro的Subject创建的内部流程
3.Shiro的简介
Shiro源码分析---FilterChain创建过程
在Shiro框架中,无论是进行认证还是权限控制,都依赖于过滤器的配置与应用。在实际开发中,可能需要配置多个过滤器,但每个请求所经过的potplayer视频源码制作过滤器组合却因请求不同而异。因此,理解一个请求会通过哪些过滤器,对于熟练使用Shiro至关重要。本文将详细解析请求通过的过滤器创建过程。
Shiro框架通过`org.apache.shiro.web.filter.mgt.FilterChainResolver`接口定义了如何确定一个请求应经过哪些过滤器。接口中的唯一方法`getChain`负责查找并组装一个过滤器链(FilterChain),该链包含了请求处理过程中所应用的所有过滤器。`FilterChain`是一个熟知的概念,尤其是对于Servlet开发人员来说,它在日常工作中常见。而`FilterChainResolver`仅是ublive源码一个接口,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`被调用,此步骤是mscode源码确定过滤器链的关键环节。
至此,Shiro框架中FilterChain创建过程已全面解析完成。如有任何错误或需要进一步讨论的问题,欢迎指正。感谢阅读,期待更多的技术交流。
Shiro的Subject创建的内部流程
在使用Shiro框架进行编程时,我们通常会调用Subject对象的login()方法来实现认证过程。然而,当我们查看Subject接口的定义时,会发现login()方法实际上只是声明了功能,而没有具体的实现。那么,当我们在代码中调用Subject.login()时,实际执行的是哪个类的功能呢?接下来,我们将探索Shiro Subject创建的drm源码内部流程。
首先,我们查看SubjectUtils类中的getSubject方法,这是用于从当前线程中获取或创建Subject对象的入口。通过调用Subject内部的Builder设计模式,我们能够创建一个Subject实例。然后,我们将深入Subject内部,了解其内部结构。Subject是一个接口,而Builder类是其内部的静态类,用于构建Subject实例。
在Subject的内部,我们可以看到Builder类与SecurityManager之间的关系。最终,SecurityManager负责创建Subject实例的工作。然而,smartdns源码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/...]
日本氣象廳提醒民眾未來一個月注意可能發生最大震度5強及以上地震
抓住關鍵的小指頭|天下雜誌
三高族群每天都要動一動! 遵守「3規則」 才能動得更健康
《哈囉!毛小孩》 郭書瑤媽寵毛孩無極限 狗吃雞腿女兒喝湯
鄭文燦涉貪提高至1200萬元交保 桃檢當庭提出抗告
攜手日本料理店!華航推新商務餐 主廚曝「18年來最難做」