1-常用过滤器介绍

简介: 本文介绍了Spring Security中的15个核心过滤器,涵盖安全上下文管理、认证授权、会话控制、异常处理等功能,帮助开发者理解其在Web请求处理链中的作用与执行顺序。

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

若有收获,就点个赞吧


相关文章
|
4月前
|
消息中间件 运维 物联网
语音通知
语音通知服务适用于科技公司服务器或物联网设备异常时的告警通知。通过语音电话形式,向处理人播报预设模板内容,支持变量替换实现个性化提醒。需开通语音服务并申请资质、话术、号码及模板,可通过API发起呼叫并查询记录,支持主动查询与消息回执两种结果获取方式,提升运维响应效率。
语音通知
|
4月前
|
JSON 安全 机器人
钉钉通知
本文介绍如何通过Java代码调用钉钉机器人API实现系统告警消息推送。内容涵盖机器人创建、Webhook配置、Postman测试及Java代码实现,并提供限流策略与关键词安全设置等最佳实践,助力实时监控与异常通知。
|
4月前
|
安全 Java 应用服务中间件
4.认识SpringSecurity
Spring Security 是 Spring 生态中的安全框架,提供认证、授权及安全防护功能。支持多种认证方式(如表单、OAuth2、JWT等),基于过滤器链实现请求控制,可防御 CSRF 等攻击,保障 Web 应用安全。
|
4月前
|
存储 JSON NoSQL
3-MongoDB常用命令
本文介绍MongoDB常用操作命令,涵盖数据库与集合的创建、查看、删除,以及文档的增删改查、分页、排序和统计查询。以文章评论系统为例,演示数据插入、更新、条件查询及投影、分页显示等核心功能,帮助快速掌握MongoDB基本用法。
3-MongoDB常用命令
|
4月前
|
NoSQL Java 测试技术
5-MongoDB实战演练
本课程以某头条文章评论业务为场景,基于MongoDB实战实现评论的增删改查、按文章ID查询、分页加载及点赞功能。采用SpringDataMongoDB与MongoTemplate优化数据操作,提升性能,并结合索引优化查询效率。
 5-MongoDB实战演练
|
4月前
|
XML Java Maven
3. 打包
本文介绍Java项目打包为可执行JAR文件的流程,包括配置文件处理、Maven打包步骤、运行与停止指令。支持前台/后台运行,并提供分离依赖与配置的打包参考方案。
3. 打包
|
4月前
|
监控 Java 测试技术
生产环境发布管理
本文介绍大型团队中生产环境的发布管理流程,涵盖从开发到生产的多环境部署策略(DEV→TEST→PRE→PROD),结合自动化CI/CD平台实现分支管理、一键发布与回滚。通过图文详解环境隔离、Jenkins+Docker自动化构建部署、Skywalking日志链路追踪等实践,提升发布效率与系统稳定性。
|
4月前
|
存储 安全 Java
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,仅保留原始类型(如Object或限定类型)。这导致泛型信息在运行时不可用,引发诸如无法直接使用基本类型、instanceof检查受限、静态成员不能引用泛型参数等问题。同时,编译器通过桥接方法和自动类型转换保障多态与类型安全,但开发者需注意其背后的机制以避免潜在错误。
|
4月前
|
存储 Java
常量池
常量池是Java类文件中用于存储编译期生成的各种字面量和符号引用的区域,包括字符串、基本数据类型值、类和方法的符号信息等,是实现高效内存管理和运行时解析的重要机制。
|
4月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用(读完就懂)
Thread.sleep(0) 并非无用,它会触发操作系统立即重新进行CPU竞争,让其他线程获得执行机会。在Windows等抢占式系统中,即使优先级高,也可通过Sleep(0)主动让出时间片,避免界面假死,提升响应性。

热门文章

最新文章