常用过滤器介绍

简介: Spring Security通过过滤器链实现安全控制,涵盖认证、授权、CSRF防护等。如SecurityContextPersistenceFilter管理上下文,UsernamePasswordAuthenticationFilter处理登录,LogoutFilter处理退出,CsrfFilter防范跨站请求伪造。不同配置下过滤器数量与类型动态调整,灵活适配各类安全需求。(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配置的修改,有些过滤器可能会被去掉。我们一步步往下走着看。

相关文章
|
7月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是MyBatis的增强工具,简化单表CRUD操作,无需编写XML,通过BaseMapper、条件构造器、分页插件等实现高效开发,支持自定义SQL、逻辑删除、枚举与JSON处理,提升开发效率。
|
7月前
|
存储 缓存 负载均衡
Nacos注册中心
本文详细介绍Nacos的安装部署、服务注册与发现、分级模型、负载均衡策略、权重控制、环境隔离及实例类型等核心功能,涵盖从入门到实战的全流程,助力掌握Nacos在微服务架构中的应用,实现高效服务治理与配置管理。
|
7月前
|
缓存 NoSQL Java
微服务高频面试题
本课程系统讲解微服务架构核心知识,涵盖SpringBoot与SpringCloud应用、Nacos注册与配置中心、OpenFeign远程调用、Sentinel熔断限流、Gateway网关鉴权、分布式事务Seata、RabbitMQ消息队列、Elasticsearch搜索及Redis缓存等技术,结合实战场景解析服务治理、数据同步与高并发处理方案。
|
7月前
|
canal 消息中间件 关系型数据库
配置数据同步环境
配置Canal+RabbitMQ实现MySQL数据同步,通过开启Binlog日志、创建专用用户并授权,部署Canal监听指定表变更,将增量数据实时发送至RabbitMQ指定队列,确保hm-item库中item_sync表的数据变更可被下游服务消费。
|
7月前
|
关系型数据库 MySQL Java
开发环境搭建
配置开发环境是高效学习的第一步。并配置JDK11。安装Maven 3.8.6,配置本地仓库与阿里云镜像。安装Git并配置用户信息,在IDEA中集成。Fork黑马商城项目至个人Gitee仓库并克隆到本地。使用DataGrip创建hmall数据库,导入SQL脚本,修改application-dev.yaml中的数据库配置。前端通过nginx运行,进入hmall-nginx目录,用命令行启动nginx(start nginx.exe)。访问http://localhost:18080,登录测试系统。确保各服务正常运行,为后续开发打好基础。
|
7月前
|
Java Nacos Maven
Eureka服务注册与发现
本章介绍Eureka服务注册中心的搭建与使用,完成user-service和order-service的服务注册,实现多实例部署。虽Eureka已被SpringCloud逐步淘汰,但其核心思想仍具参考价值,后续将用Nacos替代并深入探讨。
|
7月前
|
存储 Java 关系型数据库
微服务概述
本文对比单体与微服务架构,解析微服务定义、特征及优缺点,涵盖技术选型、部署方案与学习路径,系统介绍微服务实现方式,助力构建高内聚、低耦合的分布式应用体系。(238字)
|
7月前
|
Java 数据库 Sentinel
服务保护、分布式事务 学习目标
本课程深入讲解微服务保护与分布式事务控制,涵盖雪崩问题、熔断降级、限流、线程隔离等核心机制,基于Sentinel实现服务容错;结合Seata实现AT模式的分布式事务管理,掌握CAP原理与实际应用方案。
|
7月前
|
安全 Java Spring
过滤器链加载原理
通过分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain源码,揭示了Spring Security过滤器链的加载机制:web.xml中配置的DelegatingFilterProxy通过名称获取FilterChainProxy,再由其封装多个SecurityFilterChain,最终将十五个过滤器逐一执行,实现了安全控制的自动装配。
|
7月前
|
关系型数据库 MySQL Java
开发环境搭建
配置开发环境是项目学习的第一步。建议电脑内存16G以上,推荐32G,可搭配便携显示器提升效率。下载并安装虚拟机(CentOS 7,IP:192.168.101.68)、IDEA、Maven、Git等工具,导入课程资料中的虚拟机文件,配置网络与SSH连接。使用FinalShell远程操作,启动Docker、MySQL等服务。IDEA中设置编码、自动导包、Java 11编译级别,并配置Maven本地仓库。通过Gitee Fork黑马商城项目,克隆到本地,创建hmall数据库并导入SQL。修改配置文件中的数据库地址与密码,启动后端服务。前端使用nginx部署,命令行启动。