常用过滤器介绍

简介: Spring Security通过过滤器链实现安全控制,如SecurityContextPersistenceFilter管理上下文,UsernamePasswordAuthenticationFilter处理登录,CsrfFilter防范跨站请求伪造。各过滤器分工明确,按需加载,共同保障Web应用安全。

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

相关文章
|
9月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务统一解决方案,弥补了各技术分散的不足,具备约定优于配置、组件丰富、开箱即用等特点。通过伦敦地铁站命名版本,避免与子项目版本冲突。Spring Cloud Alibaba融合阿里开源组件(如Nacos、Sentinel、Seata等),提供完整微服务生态,因Netflix组件停更,现成为主流选择。本节介绍其诞生背景、版本机制及技术体系,为后续实战奠定基础。
|
9月前
|
JSON API 数据库
如何写好一篇技术方案
本模板用于规范产品需求文档,涵盖项目背景、变更记录、功能模块、流程图、API设计等内容,支持语雀卡片与文件附件,提升团队协作效率。
|
9月前
|
容灾 关系型数据库 Nacos
Seata的部署和集成
本文介绍Seata分布式事务TC服务的部署与微服务集成步骤。包括下载、配置、数据库表初始化,通过Nacos实现配置共享与注册,搭建高可用集群,并实现异地容灾。微服务通过统一配置中心动态映射事务组,提升系统灵活性与可靠性。(239字)
|
9月前
|
JSON 自然语言处理 数据库
索引库、文档操作
本文介绍了Elasticsearch的核心概念及其与MySQL的对比,涵盖索引、映射、文档等结构,详细讲解了索引库和文档的增删改查操作,并结合Kibana与Java RestClient实现创建、查询、删除索引及批量导入数据,帮助读者掌握ES基础操作与实际应用。
|
9月前
|
SQL NoSQL 前端开发
大厂如何解决订单幂等问题
在分布式系统中,网络重试易导致重复请求,需保证接口幂等性。创建订单时可预生成唯一订单号,利用数据库主键唯一约束防止重复插入;更新订单时通过版本号机制,校验并原子更新数据,避免ABA问题。结合Redis或数据库状态标记,确保支付等操作不重复执行,保障数据一致性,适用于各类需幂等的业务场景。
|
9月前
|
运维 Java 关系型数据库
微服务概述
微服务架构将单体应用拆分为多个独立、轻量级的服务,各服务围绕业务构建,独立开发、部署与扩展,通过RESTful API通信。它具备服务自治、技术栈灵活、故障隔离等优势,但也带来运维复杂、分布式事务等挑战。自2014年由Martin Fowler等人推动,逐步演进为SpringCloud等成熟方案,成为现代云原生应用的主流架构之一。(238字)
|
9月前
|
自然语言处理 关系型数据库 MySQL
数据聚合、自动补全、数据同步
本文介绍了Elasticsearch中数据聚合、自动补全与数据同步的核心功能。通过Bucket、Metric、Pipeline三类聚合,可实现品牌分组、统计计算等实时分析;结合拼音分词器与Completion Suggester,实现搜索框智能提示;并通过MQ或binlog监听实现MySQL与ES的数据同步,提升系统解耦与实时性。
|
9月前
|
NoSQL Shell Redis
Redis集群伸缩,转移插槽失败
Redis集群报错“Nodes don't agree about configuration!”,提示slot 0处于importing状态。需登录对应实例(如redis-cli -c -p 7004),执行`cluster setslot 0 stable`取消迁移,恢复槽位稳定状态,确保集群配置一致后方可重新平衡。
|
9月前
|
安全 数据安全/隐私保护 微服务
什么是权限管理
权限管理包含认证与授权两大核心。认证验证用户身份,确保合法登录;授权则根据角色分配资源访问权限,实现菜单差异化展示。通过ACL、RBAC等通用模型,构建安全可控的系统访问机制,保障数据安全与操作合规,是微服务架构中不可或缺的基础能力。(238字)
|
9月前
|
JSON 缓存 前端开发
什么是跨域
CORS(跨域资源共享)是W3C标准,允许浏览器向跨源服务器发送XMLHttpRequest请求,突破AJAX同源限制。需浏览器和服务器共同支持,现代浏览器均已兼容。通信过程由浏览器自动处理,开发者无需特殊编码。核心在于服务器需实现CORS接口,通过设置如Access-Control-Allow-Origin等响应头,控制跨域权限。分为简单请求与非简单请求,后者会先发起OPTIONS预检。相比仅支持GET的JSONP,CORS支持所有HTTP方法,更灵活安全。

热门文章

最新文章