• Spring Security基本框架之过滤器


    本文内容来自王松老师的《深入浅出Spring Security》,自己在学习的时候为了加深理解顺手抄录的,有时候还会写一些自己的想法。

            在Spring Security中,认证和授权等功能都是基于过滤器来完成的。在引入Spring Security依赖之后开发者不做任何配置时Spring Security会为我们加载一部分过滤器:

    • SecurityContextPersistenceFilter:在请求处理之前将安全信息加载到SecurityContextHolder中方便后续使用。请求结束后,在擦除SecurityContextHolder中的信息。
    • CsrfFilter:处理CSRF攻击
    • LogoutFilter:处理注销登录
    • UserNamePasswordAuthenticationFilter:处理表单登录
    • DefaultLoginPageGeneratingFilter:配置默认登录页面
    • DefaultLogoutPageGeneratingFilter:配置默认注销页面
    • BasicAuthenticationFilter:处理HttpBasic登录
    • 还有很多........

            开发者所见到的Spring Security提供的功能都是通过过滤器来实现的,这些过滤器按照既定的优先级排列,最终形成一个过滤器链。开发者也可以自定义过滤器,并通过@Order注解去调整自定义过滤器链中的位置。需要注意的是,默认过滤器并不是直接放在原生Web项目中的原生过滤器链中,而是通过一个FilterChainProxy嵌入到Web原生项目的原生过滤器链中:

             在Spring Security中这样的过滤器链不仅仅只有一个,可能会存在有多个。如下图,当存在多个过滤器链时需要指定他们的优先级,当请求达到之后会从FileterChainProxy中进行分发,先和那个过滤器链匹配上就先用哪个过滤器链进行处理。等系统存在多个不同认证体系时,那么使用多个过滤器链就非常有效。

             FilterChainProxy作为一个顶层的管理者,将统一管理Security Filter。FilterChainProxy本身将通过Spring框架提供的DelegatingFilterProxy整合到原生过滤器链中,如下图:

  • 相关阅读:
    大型数据中心云平台建设中网络的知识及实践
    Elasticsearch学习-- 聚合查询
    通讯录管理系统
    关键节点与邻居搜索:K-Core算法对比K-Hop算法的效能较量
    TP5 模型查询的返回值、返回值的判断以及所使用的SQL
    Python 全栈系列200 Redis Agent
    【Spring】Spring MVC
    JVM启动参数大全
    1500*A. Boredom(DP)
    Python的基础语法(十五)
  • 原文地址:https://blog.csdn.net/qq_27062249/article/details/127825763