1-常用过滤器介绍

简介: Spring Security通过过滤器链实现安全控制,涵盖认证、授权、CSRF防护等功能。如SecurityContextPersistenceFilter管理上下文,UsernamePasswordAuthenticationFilter处理登录,LogoutFilter处理退出等。过滤器数量与加载取决于具体配置,灵活可扩展,体现AOP思想精髓。(238字)

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

相关文章
|
5月前
|
SQL 安全 关系型数据库
了解SQL注入
SQL注入是利用Web应用输入验证缺陷,将恶意SQL代码注入数据库查询的攻击方式。可导致身份绕过、数据泄露、篡改甚至系统命令执行。常见于登录框等用户输入场景,通过构造特殊字符如单引号、注释符改变SQL逻辑。防御需结合输入验证、参数化查询与错误信息管控,开发与运维协同防护。
|
5月前
|
SQL NoSQL 前端开发
大厂如何解决订单幂等问题
为保障分布式系统数据一致性,需实现接口幂等性。创建订单时,通过预生成唯一订单号并利用数据库主键唯一约束,防止重复插入;支付时结合Redis或DB流水表标记请求处理状态,避免重复扣款。更新订单时引入版本号机制,校验并原子更新version,解决ABA问题。两类方法可通用至各类数据库操作服务,确保数据准确。
|
5月前
|
前端开发 程序员 开发者
常见注解及使用说明
本文介绍了SpringMVC中@RequestMapping注解的作用,它用于将HTTP请求映射到控制器方法,实现前后端接口路径的对应。通过示例讲解了其在增删改查中的应用,并提及@GetMapping等派生注解为@RequestMapping的封装,帮助开发者快速构建Web接口。
|
5月前
|
存储 缓存 Java
自定义注解
本文介绍如何在Spring项目中实现自定义注解,结合AOP完成日志记录,并通过过滤器实现登录权限控制。涵盖注解定义、元注解说明、切面编程及实际应用场景,展示其在日志、验证、权限等场景的扩展用途,帮助提升代码可读性与维护性。(238字)
|
5月前
|
程序员
SpringCloud(2024)
本节内容源自传智教育·黑马程序员,作者仅作学习总结与拓展,旨在传播优质教学资源。内容分重点掌握(实用、高级、面试篇)和学术涉猎两部分,兼顾核心技能与知识广度,尊重原创,侵权必究。
|
5月前
|
敏捷开发 Java 测试技术
为什么要单元测试
单元测试看似拖慢进度,实则为软件研发“加速”。它通过快速反馈、精准定位问题、提升代码质量与可维护性,夯实研发效率地基。本文解析测试演进史、金字塔模型及常见误区,揭示为何高质量单测能让项目跑得更快更稳。
|
5月前
|
存储 安全 小程序
认识OAuth2.0
OAuth2.0是一种开放授权标准,允许第三方应用在用户授权下安全访问资源,无需获取用户账号密码。其核心是通过令牌(token)机制实现权限控制,广泛应用于服务间资源调用和第三方登录。主要包含四种模式:授权码模式(最安全,适用于大多数场景)、简化模式(适用于无后端的应用)、密码模式(需高度信任)和客户端模式(服务直连,与用户无关)。Spring Security中可结合OAuth2实现单点登录与资源共享。
|
5月前
|
安全 数据库 数据安全/隐私保护
1.RememberMe简介及用法
RememberMe功能可使用户关闭浏览器后仍保持登录状态,提升体验。其通过服务端生成令牌(remember-me Cookie)实现,避免重复登录。但令牌泄露会带来安全风险,可通过持久化Token至数据库并增加二次校验机制来增强安全性。
|
5月前
|
存储 安全 Java
认证源码分析与自定义后端认证逻辑
本文深入分析Spring Security认证流程,从UsernamePasswordAuthenticationFilter到AuthenticationManager、ProviderManager,最终到UserDetailsService的实现原理,揭示了自定义数据库认证的关键点。通过实现UserDetailsService并重写loadUserByUsername方法,结合配置AuthenticationManagerBuilder,即可完成自定义用户认证逻辑。整个流程涵盖过滤器链、认证令牌封装、权限加载及安全上下文存储,帮助开发者掌握基于数据库的认证集成方案。
|
5月前
|
前端开发 安全 Java
1.自定义认证前端页面
本示例展示Spring Security基础配置:前端引入登录页,后端新增接口并配置安全规则。通过SecurityConfig实现请求认证、表单登录、自定义跳转路径,并禁用CSRF。启动后访问/demo/index自动跳转登录页,输入用户名密码后验证权限并返回响应内容,实现简单安全控制。(238字)