过滤器链加载原理

简介: 通过前文介绍的十五个过滤器,我们了解了Spring Security的工作流程。本文深入源码,解析DelegatingFilterProxy如何加载springSecurityFilterChain,进而引出FilterChainProxy与SecurityFilterChain的实现机制,揭示过滤器链自动装配原理,为自定义认证页面奠定基础。(238字)

通过前面十五个过滤器功能的介绍,对于SpringSecurity简单入门中的疑惑是不是在心中已经有了答案了呀? 但新的问题来了!我们并没有配置这些过滤器啊?它们都是怎么被加载出来的?
1-DelegatingFilterProxy
我们在web.xml中配置了一个名称为springSecurityFilterChain的过滤器DelegatingFilterProxy,接下我直接对 DelegatingFilterProxy源码里重要代码进行说明,其中删减掉了一些不重要的代码,大家注意我写的注释就行了!
第二步debug结果如下:

由此可知,DelegatingFilterProxy通过springSecurityFilterChain这个名称,得到了一个FilterChainProxy过滤器, 最终在第三步执行了这个过滤器。
2-FilterChainProxy
注意代码注释!
第二步debug结果如下图所示,惊不惊喜?十五个过滤器都在这里了!
再看第三步,怀疑这么久!原来这些过滤器还真是都被封装进SecurityFilterChain中了。
3-SecurityFilterChain
最后看SecurityFilterChain,这是个接口,实现类也只有一个,这才是web.xml中配置的过滤器链对象!
Java
运行代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//接口
public interface SecurityFilterChain {
boolean matches(HttpServletRequest var1);
List getFilters();
}

//实现类
public final class DefaultSecurityFilterChain implements SecurityFilterChain {

private static final Log logger = LogFactory.getLog(DefaultSecurityFilterChain.class);
private final RequestMatcher requestMatcher;
private final List<Filter> filters;

public DefaultSecurityFilterChain(RequestMatcher requestMatcher,
                                  Filter... filters) {
    this(requestMatcher, Arrays.asList(filters));
}

public DefaultSecurityFilterChain(RequestMatcher requestMatcher, 
                                  List<Filter> filters) {
    logger.info("Creating filter chain: " + requestMatcher + ", " + filters);
    this.requestMatcher = requestMatcher;
    this.filters = new ArrayList(filters);
}

public RequestMatcher getRequestMatcher() {
    return this.requestMatcher;
}

public List<Filter> getFilters() {
    return this.filters;
}

public boolean matches(HttpServletRequest request) {
    return this.requestMatcher.matches(request);
}

public String toString() {
    return "[ " + this.requestMatcher + ", " + this.filters + "]";
}

}
总结:通过此章节,我们对SpringSecurity工作原理有了一定的认识。但理论千万条,功能第一条,探寻底层,是为了更好的使用框架。 那么,言归正传!到底如何使用自己的页面来实现SpringSecurity的认证操作呢?要完成此功能,首先要有一套自己的页面!

相关文章
|
存储 关系型数据库 数据库
聊多版本并发控制(MVCC)
MVCC是数据库并发控制技术,用于减少读写冲突。它维护数据的多个版本,使事务能读旧数据而写新数据,无需锁定记录。当前读获取最新版本,加锁防止修改;快照读不加锁,根据读取时的读视图(readview)决定读哪个版本。InnoDB通过隐藏字段(DB_TRX_ID, DB_ROLL_PTR)和undo log存储版本,readview记录活跃事务ID。读已提交每次读取都创建新视图,可重复读则在整个事务中复用一个视图,确保一致性。MVCC通过undo log版本链和readview规则决定事务可见性,实现了非阻塞并发读。
1920 5
聊多版本并发控制(MVCC)
|
NoSQL Java 网络安全
Redisson官方文档 - 2. 配置方法
Redisson客户端配置方法
34862 0
|
6月前
|
数据采集 开发者 Python
Python异步编程:解锁高性能并发新姿势
Python异步编程:解锁高性能并发新姿势
364 133
|
6月前
|
缓存 负载均衡 安全
Nginx 反向代理:原理、优势与配置指南
Nginx反向代理是核心服务器架构技术,可实现请求转发、负载均衡、高可用与安全防护。它隐藏后端服务器,自动剔除故障节点,并支持SSL终止、缓存等高级功能,配置简洁灵活,广泛应用于高性能Web系统。
636 13
|
8月前
|
前端开发 JavaScript Java
Spring Boot中使用拦截器
Spring Boot拦截器基于AOP,用于拦截动态请求,常用于权限控制、登录验证等场景。通过实现HandlerInterceptor接口定义拦截逻辑,结合WebMvcConfigurer配置路径匹配规则。注意避免静态资源被误拦截,可采用实现WebMvcConfigurer方式或手动放行静态资源。支持灵活扩展,如通过自定义注解实现方法级开关控制,适用于前后端分离或传统项目中的请求过滤需求。
|
8月前
|
NoSQL Linux 网络安全
Redis集群部署指南
本章介绍CentOS7下Redis集群搭建,涵盖单机安装、主从复制及分片集群配置。通过详细步骤实现三节点主从架构与哨兵高可用集群,助力掌握Redis分布式部署核心技能。
|
1月前
|
人工智能 缓存 自然语言处理
阿里云百炼Token Plan支持模型和适用场景,兼容Agent工具主要能力及适用场景参考
阿里云百炼Token Plan团队版是一款多模型AI订阅产品,支持Qwen3.7-Max/Plus、Qwen3.6-Flash、Wan2.7图像生成、DeepSeek-v4-Pro及Kimi、GLM、MiniMax等第三方模型,适配Qwen Code、OpenClaw等Agent工具。产品提供标准版(198元/月)、高级版(698元/月)、尊享版(1398元/月)三档坐席套餐,另有共享用量包可选,按Credits统一计量,支持按月/按年付费。团队版具备多租户隔离、数据不用于训练、席位管理与用量分析等企业级能力,适用于AI编程、智能客服、内容创作、RPA自动化等多场景。
|
8月前
|
jenkins 持续交付 调度
项目《神领物流》
本项目为自研物流系统,基于微服务架构实现智能调度与管控,涵盖用户、快递员、司机多端应用。采用GitFlow管理代码,通过Jenkins实现持续集成,提交后自动构建,保障开发效率与系统稳定,类似顺丰速运模式,面向C端提供高效快递服务。(239字)
|
8月前
|
设计模式 Java 程序员
推荐书籍
推荐多本Java经典书籍:《Head First Java》适合入门,《Java核心技术》深入巩固基础,《Java编程思想》整合设计模式,适合进阶。并发方面有《Java并发编程之美》等,JVM推荐《深入理解Java虚拟机》与《实战JVM》。体系全面,适合不同阶段学习。
|
8月前
|
负载均衡 算法 Java
微服务篇
SpringBoot核心原理是自动装配,通过@SpringBootApplication注解实现配置类、组件扫描与自动配置。其启动流程包括环境初始化、上下文创建与自动化配置。常用起步依赖如web、redis等;支持properties、YAML等配置文件,后加载的覆盖先加载的。项目通过Feign、Ribbon实现服务通信与负载均衡,使用Nacos做注册与配置中心,Sentinel或Hystrix实现限流熔断,Gateway实现网关限流与CORS跨域控制,结合Spring Cloud五大组件构建微服务架构。

热门文章

最新文章