过滤器原理分析

简介: 本文介绍了Spring Security中常用的15个核心过滤器,涵盖安全上下文管理、认证授权、CSRF防护、会话控制等功能,帮助开发者理解各过滤器作用及执行流程,为深入掌握Spring Security机制奠定基础。

1-常用过滤器介绍

过滤器是一种典型的AOP思想,关于什么是过滤器就不赘述了,读者们应该也都知道凡是web工程都能用过滤器。 接下来咱们就一起看看Spring Security中这些过滤器都是干啥用的,源码我就不贴出来了,有名字,大家可以自己在idea中Double Shift去。我也会在后续的学习过程中穿插详细解释。

1. org.springframework.security.web.context.SecurityContextPersistenceFilter

首当其冲的一个过滤器,作用之重要自不必多言。 SecurityContextPersistenceFilter主要是使用SecurityContextRepository在session中保存或更新一个SecurityContext,并将SecurityContext给以后的过滤器使用,来为后续filter建立所需的上下文。 SecurityContext中存储了当前用户的认证以及权限信息。

2. org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter

此过滤器用于集成SecurityContext到Spring异步执行机制中的WebAsyncManager

3. org.springframework.security.web.header.HeaderWriterFilter

向请求的Header中添加相应的信息,可在http标签内部使用security:headers来控制

4. org.springframework.security.web.csrf.CsrfFilter

csrf又称跨域请求伪造,SpringSecurity会对所有post请求验证是否包含系统生成的csrf的token信息, 如果不包含,则报错。起到防止csrf攻击的效果。

5. org.springframework.security.web.authentication.logout.LogoutFilter

匹配URL为/logout的请求,实现用户退出,清除认证信息。

6. org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter

认证操作全靠这个过滤器,默认匹配URL为/login且必须为POST请求。

7. org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter

如果没有在配置文件中指定认证页面,则由该过滤器生成一个默认认证页面。

8. org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter

由此过滤器可以生产一个默认的退出登录页面

9. org.springframework.security.web.authentication.www.BasicAuthenticationFilter

此过滤器会自动解析HTTP请求中头部名字为Authentication,且以Basic开头的头信息。

10. org.springframework.security.web.savedrequest.RequestCacheAwareFilter

通过HttpSessionRequestCache内部维护了一个RequestCache,用于缓存HttpServletRequest

11. org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter

针对ServletRequest进行了一次包装,使得request具有更加丰富的API

12. org.springframework.security.web.authentication.AnonymousAuthenticationFilter

当SecurityContextHolder中认证信息为空,则会创建一个匿名用户存入到SecurityContextHolder中。 spring security为了兼容未登录的访问,也走了一套认证流程,只不过是一个匿名的身份。

13. org.springframework.security.web.session.SessionManagementFilter

SecurityContextRepository限制同一用户开启多个会话的数量

14. org.springframework.security.web.access.ExceptionTranslationFilter

异常转换过滤器位于整个springSecurityFilterChain的后方,用来转换整个链路中出现的异常

15. org.springframework.security.web.access.intercept.FilterSecurityInterceptor

获取所配置资源访问的授权信息,根据SecurityContextHolder中存储的用户信息来决定其是否有权 限。 好了!这一堆排山倒海的过滤器介绍完了。 那么,是不是spring security一共就这么多过滤器呢?答案是否定的!随着spring-security.xml配置的添加,还 出现新的过滤器。 那么,是不是spring security每次都会加载这些过滤器呢?答案也是否定的!随着spring-security.xml配置的修改,有些过滤器可能会被去掉。我们一步步往下走着看。


相关文章
|
人工智能 IDE API
AI驱动的开发者工具:打造沉浸式API集成体验
本文介绍了阿里云在过去十年中为开发者提供的API服务演变。内容分为两大部分:一是从零开始使用API的用户旅程,涵盖API的发现、调试与集成;二是回顾阿里云过去十年为开发者提供的服务及发展历程。文中详细描述了API从最初的手写SDK到自动化生成SDK的变化,以及通过API Explorer、IDE插件和AI助手等工具提升开发者体验的过程。这些工具和服务旨在帮助开发者更高效地使用API,减少配置和调试的复杂性,提供一站式的解决方案。
|
6月前
|
监控 安全 测试技术
从0到1构建电商API:如何用规范设计省下百万维护成本?
本文系统解析电商API接口开发全流程,涵盖需求分析、架构设计、安全实践、测试上线及文档维护等关键环节,结合技术规范与实际案例,助力构建高可用、可扩展的电商系统。
|
10月前
|
人工智能 安全 API
0 代码为你的 Typecho 博客接入阿里云百炼(可接入 DeepSeek-R1 满血版!)
随着科技企业LLM发展成熟,AIHelper插件让Typecho博客轻松拥有AI助手。通过集成阿里云百炼API,支持DeepSeek-R1、Qwen等模型,帮助读者快速查找内容、总结文章。本文详细介绍了从导出文章、配置阿里云百炼、创建AI应用到安装配置插件的全过程,确保安全高效地为博客添加智能交互功能。相比官方方案,AIHelper提供更安全的访问限制和低代码部署方式,无需编写代码即可实现智能化管理。
0 代码为你的 Typecho 博客接入阿里云百炼(可接入 DeepSeek-R1 满血版!)
|
9月前
|
前端开发 数据挖掘 关系型数据库
‌三三复制公排分销商城系统开发玩法设计‌
三三复制公排分销商城系统是一种结合三级分销、公排与滑落机制的电商平台。用户通过推荐新成员形成下级分销网络,满三后 excess 用户自动滑落至上一级,增加收益机会。系统设有团队奖励、个人业绩奖励及实时数据分析功能,支持多支付方式与商品管理。技术上采用前端响应式设计与后端高效架构,确保安全性与性能优化。开发时需注重合规性、用户体验与数据安全,并持续迭代以满足需求。此模式虽具吸引力,但须谨慎遵守法律法规。
|
10月前
|
运维 Oracle 关系型数据库
YashanDB演讲实录|王南:YAC集群,核心平替
本文分享了“2024国产数据库创新生态大会”上,深算院首席产品官兼崖山科技副总裁王南的演讲实录,主题为《YAC集群,核心平替》。文章深入探讨了数据库行业面临的规模化应用挑战,提出崖山数据库在核心技术、团队实力和商业化能力上的优势。崖山通过YashanDB V23版本,正式发布共享集群LTS版本、Oracle 99%兼容、MySQL生态支持、私有云管平台及数据库一体机等创新成果,提供高性价比的平替方案。同时,崖山全面开放V23版本下载,携手200多家生态伙伴加速商业落地,助力国产数据库迈向大规模应用新时代。
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《探秘DeepSeek优化器:解锁模型训练的高效密码》
DeepSeek作为备受瞩目的大语言模型,在自然语言处理任务中表现出色,其优化器功不可没。该优化器具备自适应学习率调节机制,能灵活应对训练动态,确保快速收敛与稳定;采用高效梯度处理技术,防止梯度爆炸或消失,支持稀疏梯度更新,减少计算开销;完美适配分布式训练环境,降低通信开销,加速多节点协同工作;并与模型架构深度适配,充分发挥潜力。这些特点共同推动DeepSeek在复杂任务中取得优异表现。
282 1
|
数据库 Python
Python模块重载的五种方法
【7月更文挑战第17天】在Python中实现模块重载可通过以下五种方法: 1. 使用`importlib.reload()`重新加载模块 2. 重新执行导入语句,先删除`sys.modules`中的模块再导入 3. 利用`exec()`函数直接读取并执行模块代码: ```python with open('my_module.py', 'r') as f: code = f.read() exec(code) 4. 通过新进程或子线程重新导入和执行模块. 5. 设计模块时采用动态加载配置或数据,避免直接重载.
792 4
|
Kubernetes 负载均衡 调度
Kubernetes的主要用途是什么?
【7月更文挑战第2天】Kubernetes的主要用途是什么?
705 1