常用过滤器介绍

简介: /

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


相关文章
|
6月前
|
前端开发 测试技术 API
企业级API工具的选择:Apipost和Apifox哪个好
Apifox相比Apipost在企业级API协作方面表现更出色,其一体化平台设计有效提升团队协作效率,功能整合度高,支持标准化接口管理,更适合规模化团队和技术协作需求。
448 120
|
8月前
|
数据安全/隐私保护
微博自动评论工具,微博评论点赞协议人家,脚本开发易语言
框架示例,实际实现需要处理更多细节如验证码、请求频率限制等。建议遵守平台规则
|
人工智能 安全 人机交互
ACL 2024:PsySafe:跨学科视角下的Agent系统安全性研究
【6月更文挑战第21天】PsySafe是一个创新框架,关注多智能体系统集成大型语言模型后的安全风险。它从心理学角度评估和强化系统安全,通过模拟攻击检测漏洞,并设计防御策略。研究显示智能体的负面心理状态影响其行为安全,揭示了心理状态与行为模式的关联。该框架为MAS安全性研究提供新途径,但也面临智能体心理评估准确性和行为评估方法的挑战。[\[arxiv.org/pdf/2401.11880\]](https://arxiv.org/pdf/2401.11880)
373 6
|
存储 缓存 NoSQL
如何在Java中使用Redis
如何在Java中使用Redis
|
Python
Matplotlib 绘图标记
Matplotlib 绘图标记
261 2
|
存储 机器学习/深度学习 搜索推荐
去中心化的模型训练
去中心化的模型训练(Decentralized Model Training)是一种不依赖单一中心服务器或数据存储中心,而是在多个节点(如设备或数据拥有者)上进行联合训练的方法。这种训练模式可以更好地保护数据隐私、降低数据传输成本,并提升模型的鲁棒性和可扩展性。随着数据安全和隐私保护需求的提升,去中心化训练在深度学习和人工智能应用中的重要性逐渐增加。
565 4
|
存储 传感器 安全
生物电子学:电子设备与生物系统的融合
【10月更文挑战第21天】生物电子学是生物学与电子学的深度融合,旨在通过生物材料和结构实现电子设备与生物系统的无缝对接。本文探讨其定义、发展历程、核心研究领域及未来应用,涵盖生物信息检测、生物医学信息处理、生物系统建模和仿真、分子电子学及生物医学仪器等方面,展现其在医疗、环保、信息技术等领域的广阔前景。
|
前端开发 JavaScript API
提取网页所有链接免费API接口教程
此API用于提取指定网页内的所有链接信息并进行分类,支持POST和GET请求方式。需提供用户ID、KEY及目标网址等参数,可选指定访问节点。返回结果包括状态码、信息提示及各类链接集合,如图片、视频、文档等。示例中展示了请求格式与返回数据结构。
988 0
|
SQL 前端开发 BI
情侣小窝 Like_Girl源码V5.1.1
前后端都是使用了 grid 栅格 flex 弹性布局 高斯模糊效果 前端简约配色没有过多的复杂效果 前端首页分四个子页面 点点滴滴 留言板 关于我们 恋爱列表
237 0
情侣小窝 Like_Girl源码V5.1.1
|
传感器 监控 安全
网络监控工具的比较与选择:技术视角的深度剖析
【8月更文挑战第19天】网络监控工具的选择需要根据企业的实际需求、功能性能、成本和可维护性等多方面因素进行综合考虑。通过对SolarWinds、Zabbix、PRTG和Nagios等主流网络监控工具的比较,我们可以看到每种工具都有其独特的优势和适用场景。因此,在选择时,请务必根据您的具体情况进行权衡和选择,以确保您能够获得最佳的监控效果和投资回报。