AI爬虫世界窥镜
331 subscribers
233 photos
6 videos
16 links
AI 爬虫与数据采集

黑客渗透破解拿站改单

🛫一切有关于AI业务

咨询:@yucgz
Download Telegram
可以从图中直观的看到我们增加Filter的完整调用流程了, 只不过还有一个问题, 我们的filter02是没有配置匹配路径的, 下面我们来看一下configure方法对路径的处理:
如果当前Filter并没有给具体的路径的话, 就会给出默认的/*, 至此, 整个Filter注入机制梳理清晰.
ShiroFilterFactoryBean 机制
回到我们的环境中, 我们来看一下ShiroFilterFactoryBean的类结构.
可以看到的是, ShiroFilterFactoryBean一共实现了两个Spring的接口, 分别是FactoryBean && BeanPostProcessor, 这两个接口相信大家也不陌生, FactoryBean是工厂类, 而BeanPostProcessor是后置处理器.
基础部分参考: https://mp.weixin.qq.com/s/bCL9M4a5VD0lWNWiuzWX8Q

FactoryBean::getObject 得到了什么
当Spring扫描所有Bean时, 如果发现该Bean是属于FactoryBean, 那么就会调用该FactoryBean的getObject方法, 而ShiroFilterFactoryBean::getObject方法中定义的方法如下:
而我们打开SpringShiroFilter类图, 我们就可以看到, 该类是一个Filter:
随后我们随机访问, 即可在控制台中输出Filter, 在这里笔者就不贴图了. 而我们的SpringShiroFilter也是继承于OncePerRequestFilter, 所以当每次请求过来时, 会调用AbstractShiroFilter::doFilterInternal方法.
SpringShiroFilter 运行原理分析
那么下面我们开始分析SpringShiroFilter到底做了什么事, 从我们最开始的Shiro配置代码段开始:
可以看到的是, 我们的配置信息代码段, 只不过是对该类进行了一系列设置, 设置之后, 由于该类是工厂类 (FactoryBean), 所以会调用该类的getObject方法.
功能总结: 从配置文件中进行配置 ShiroFilterFactoryBean, 只是在对 ShiroFilterFactoryBean 的属性做赋值处理.

getObject 核心逻辑
FilterChainManager::DefaultFilterChainManager
如类名一样, DefaultFilterChainManager::filters成员属性放置了Shiro自带的权限校验的Filter. 一共有11个Filter在其中. 那么我们继续往下观察.
接下来这个applyGlobalPropertiesIfNecessary方法做的事情, 则是将刚才11个Shiro提供的默认Filter进行遍历. 判断这11个Filter中, 是否是AccessControlFilter, AuthenticationFilter, AuthorizationFilter的实例, 如果是的话, 那么将ShiroFilterFactoryBean::对应属性设置到具体Filter中去.
ShiroFilterFactoryBean::对应属性在我们的ShiroAutoConfiguration配置文件中, 是由程序员自己设置的, 我们在刚开始也讲过了.
遍历 filters, 设置特殊 filter 中的属性值为程序员在配置类中定义的值.
例如:
shiroFilterFactoryBean.setLoginUrl("/login"); // 默认登录页面
shiroFilterFactoryBean.setUnauthorizedUrl("/login"); // 未认证的情况, 也跳转到登录页面
会设置到 AuthorizationFilter, AccessControlFilter 中去.

那么我们接着往下看:
FilterChainResolver::PathMatchingFilterChainResolver
代码再继续运行, 我们则会看到FilterChainResolver的身影:
目前我们知道的是, PathMatchingFilterChainResolver只是将FilterChainManager设置进去了, 这里并没有调用其他方法, 随后丢给了new SpringShiroFilter, 目前我们还不知道PathMatchingFilterChainResolver具体是用来干嘛的, 先不管, 后面看程序是否调用到某个方法时, 我们再进行研究.
new SpringShiroFilter
最后就走到SpringShiroFilter这个构造函数了, 分别传递了WebSecurityManager以及FilterChainResolver, 下面我们看一下做了一些什么操作:
目前我们知道的是, PathMatchingFilterChainResolver只是将FilterChainManager设置进去了, 这里并没有调用其他方法, 随后丢给了new SpringShiroFilter, 目前我们还不知道PathMatchingFilterChainResolver具体是用来干嘛的, 先不管, 后面看程序是否调用到某个方法时, 我们再进行研究.
new SpringShiroFilter
最后就走到SpringShiroFilter这个构造函数了, 分别传递了WebSecurityManager以及FilterChainResolver, 下面我们看一下做了一些什么操作:
这个Filter最终设置了程序员定义的WebSecurityManager以及在createInstance()方法中生成的FilterChainResolver. 虽然目前我们还不知道FilterChainResolver做了什么.
doFilterInternal 核心逻辑
因为SpringShiroFilter是一个Filter, 并且实现了OncePerRequestFilter, 所以每次HTTP请求过来时, 会调用doFilterInternal方法, 现在我们看一下这个方法做了什么:
封装 request, response
这里只是对 request, response 进行了简单的封装, 封装为ShiroHttpServletRequest, ShiroHttpServletResponse, 读到这里暂时还没有发现对这两种方法上有什么扩展, 暂时先不管. 不过这两个封装的类类图如下:
可以看到, 都实现了HttpServletRequest, HttpServletResponse.
createSubject::SubjectContext
下面我们首先分析一下WebSubject.Builder方法做了什么事情:
我们可以看到的是WebSubject.Builder这个类, 维护了subjectContext && securityManagersecurityManager从刚开始我们已经介绍过了, 重点是这个SubjectContext.
SubjectContext是一个大的Map, 这个Map中包含了SecurityManager, ShiroServletRequest, ShiroServletResponse, 它的关系图如下:
我们可以看到的是, 它将本次请求的request, response, 以及我们重要的securityManager进行封装了. 那么下面我们看一下WebSubject.Builder::buildWebSubject方法做了什么:
1
可以看到的是, 当一次请求过来, 如果当前请求存在 SESSION, 那么会将当前的 SESSION 放入到 SubjectContext 这个 Map 中进行管理.

我们可以清晰的感觉到, SubjectContext 中存储了当前 HTTP 请求的各种状态.
这里我们可以看到, 首先判断SESSION, 如果SESSION中存在用户名信息, 那么就直接返回, 如果SESSION不存在, 或者SESSION中没有用户名信息, 那么就会通过RememberMe组件进行反序列化得到当前用户信息, 这里存在一个Shiro550的一个漏洞, 先留下悬念, 漏洞后面我们再分析.
通过这几行代码, 我们可以清楚的感受到, SubjectContext 这个 Map 中存放着当前 HTTP 请求中的所有状态, 以及我们的 SecurityManager.
🤣 全球资讯|每日实时播报

在这里获取最新最全的全网热点:
• 全球时事、国际动态、海外热点资讯✔️
• 中国大陆时政、社会民生、本地热点新闻✔️
• 明星八卦、娱乐圈动态、综艺影视快讯✔️
• 全网热点热搜、社会事件、新鲜民生资讯✔️
• 无效吃瓜、过时资讯

全天候更新,不遗漏任何热点!欢迎订阅本频道,第一时间掌握全球及娱乐最新资讯!
Please open Telegram to view this post
VIEW IN TELEGRAM
香港国际机场货机跑道偏离坠海:两名机场员工不幸身亡

2025年10月20日凌晨约3时50分(香港时间),一架从迪拜飞来的阿联酋航空货运航班EK9788在香港国际机场北跑道降落时突然偏离跑道,撞击一辆地面巡逻车后冲破围栏部分坠入海中,造成两名机场安保人员死亡。该航班由土耳其货运航空公司ACT Airlines运营的波音747-481型货机执行,机上四名机组人员幸无大碍,已安全获救。
据香港警方和机场管理局初步通报,飞机在着陆后滑行约半途偏离跑道,撞上巡逻车并将其推入海中。现场照片显示,飞机机身断裂,前后部分分离,部分机身浸没在海水中,逃生滑梯已展开。北跑道已临时关闭,其余两条跑道正常运作,但至少11个货运航班延误或取消。机场当局强调,事发时天气和跑道状况良好,飞机未发出求救信号,巡逻车确未擅入跑道。
香港民航处已启动调查,重点包括飞机偏离原因、机组操作、跑道状况及巡逻车位置等因素。这起事故是香港国际机场自1998年启用以来第二起致命事件,此前1999年曾发生中国航空客机因台风迫降致3死。阿联酋航空表示,飞机当时未载货,并与当局合作调查。

#香港 #机场 #货机 #坠海 #阿联酋航空 #航空
那么我们接着看代码