1-常用过滤器介绍

简介: 本文介绍了Spring Security中的核心过滤器链,详细解析了15个关键过滤器的作用,如SecurityContextPersistenceFilter、CsrfFilter、UsernamePasswordAuthenticationFilter等,涵盖认证、授权、会话管理及异常处理机制,揭示其基于AOP思想的请求拦截与安全控制原理。

过滤器是一种典型的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配置的修改,有些过滤器可能会被去掉。我们一步步往下走着看。

相关文章
|
存储 人工智能 安全
阿里云无影云电脑入口及全面测评:技术特性、场景适配与综合体验解析
在终端云计算快速发展的当下,阿里云无影云电脑凭借自主技术架构与多场景适配能力,成为企业数字化办公与个人高效计算的重要选择。本文基于 今年最新产品动态与权威认证信息,从官方入口与版本差异、核心技术特性、性能表现、场景适配、安全能力等维度展开测评,为用户提供客观参考。
|
3月前
|
存储 编解码 算法
推荐一款视频压缩神器!视频体积能压缩减少80%,支持指定大小压缩、批量压缩,压缩不可能不损失质量的。
推荐一款高效视频压缩工具,支持AVI、MP4、MKV等格式,可批量压缩,体积减少达80%。支持按比例或指定大小压缩,采用H.265等无损编码技术,在保证画质的前提下显著减小文件体积,操作简单,拖拽即可完成压缩,适合日常分享与存储。
285 0
|
2月前
|
人工智能 运维 机器人
3000万人问AI什么?千问这份榜单让老金看懂了2025年真相
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
2月前
|
Java 调度
什么是分片广播任务
本文介绍XXL-JOB的分片广播机制,通过集群执行器动态分片处理任务。调度中心为每个执行器分配分片参数,实现任务并行处理,提升效率。适用于大数据量分布式场景,支持动态扩容,每台机器处理部分数据,显著降低耗时。开发时可通过`getShardIndex()`和`getShardTotal()`获取分片信息,灵活控制业务逻辑。
|
2月前
|
SQL Java 数据库连接
MyBatis-Plus 超详细教程:从入门到实战,一站式掌握
MyBatis-Plus 是 MyBatis 的增强工具,简化单表 CRUD 操作,无需编写 XML,支持条件构造器、分页插件、逻辑删除、枚举与 JSON 处理,提升开发效率,兼顾灵活性与便捷性,助力从入门到实战一站式掌握。
MyBatis-Plus 超详细教程:从入门到实战,一站式掌握
|
7月前
|
人工智能 数据可视化 安全
提升效率的秘密武器:10款最佳会议纪要与任务衔接工具推荐
【企业会议纪要落地难题及解决方案】 当前企业普遍面临会议纪要执行难的问题:1)会议记录与任务执行脱节,手动转化效率低;2)责任分配不清导致重复沟通;3)缺乏追踪机制造成任务拖延。针对这些痛点,市场上涌现出10款专业工具(如飞书、Teambition等),通过智能记录、任务自动转化、进度追踪等功能实现;会议-执行"闭环管理。选型需考虑场景适配、系统对接和易用性,建议配合五步流程(模板制定-任务指派-自动提醒-定期复盘)使用。这类工具不仅能提升30%以上执行效率,更能帮助企业建立;
768 2
|
2月前
|
弹性计算 应用服务中间件 Linux
【运维实战】手把手教你在阿里云ECS上从零搭建Nginx服务器
本文详细介绍如何在阿里云ECS服务器(Alibaba Cloud Linux/CentOS/Ubuntu)上从零部署Nginx。涵盖安装、启动服务、安全组配置、验证访问及页面修改,并提供常用命令速查,助你快速搭建首个Web服务。
|
2月前
|
运维 Shell 应用服务中间件
【速查手册】Docker常用命令大全:这20%的命令解决了80%的问题
本文精炼总结 Docker 高频命令,按镜像管理、容器生命周期、排查调试、清理维护四大场景分类,详解常用参数与实战示例,附速查表,助你高效掌握核心操作,提升开发运维效率。
|
2月前
|
JSON NoSQL 关系型数据库
【技术选型】MongoDB vs MySQL:一场没有输家的“双雄对决”
本文深入对比MySQL与MongoDB的核心差异,从理念、性能到实战场景。MySQL严谨规范,适合高一致性业务;MongoDB灵活高效,契合多变需求。通过电商案例解析,揭示两者互补而非替代的关系,帮助开发者按场景选型,实现技术价值最大化。
|
2月前
|
SQL 关系型数据库 MySQL
【数据库进阶】为什么你的SQL查询这么慢?索引失效的7个常见场景
本文总结MySQL索引失效的7大常见场景:模糊查询以%开头、索引列参与计算或函数、隐式类型转换、违背最左前缀法则、OR条件使用不当、不等号查询及全表扫描风险,并结合EXPLAIN工具教你如何诊断与优化,提升查询性能。

热门文章

最新文章