如何查看 Spring Security 过滤器链?

一 引言

Spring Security 作为一个强大的安全框架,其核心是基于一系列的 Filter。这些过滤器按照一定的顺序执行,形成了一个过滤器链,每个过滤器负责处理特定的安全任务。在本文中,我们将探讨如何发现和理解 Spring Security 中注册的过滤器。

二 启用安全调试

要查看 Spring Security 的过滤器链,首先可以通过启用安全调试来实现。这将为每个请求记录详细的安全信息。

@EnableWebSecurity(debug = true)

启用调试后,服务器接收到请求时会记录所有相关信息,包括完整的安全过滤器链。

不过这是一个敏感操作,只可以在开发环境下开启,生产环境就不要开启了。

三 日志记录

另一种查看注册的 Spring Security 过滤器的方法是通过日志记录。可以通过在 application.properties 中设置日志级别来实现:

logging.level.org.springframework.security.web.FilterChainProxy=trace

这样,每次请求处理时,控制台都会输出每个过滤器的详细信息。方便我们观察与排查错误:

四 代码获取过滤器

除了手动查看日志,我们还可以通过编写代码来程序化地获取注册的过滤器。

首先,需要注入 springSecurityFilterChain 这个Bean:

@Autowired
@Qualifier("springSecurityFilterChain")
private Filter springSecurityFilterChain;

然后,将该对象转换为 FilterChainProxy 类型,并调用getFilterChains() 方法来获取所有过滤器链:

public void listFilters() {
    FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain;
    List<SecurityFilterChain> chains = filterChainProxy.getFilterChains();
    chains.stream()
          .flatMap(chain -> chain.getFilters().stream())
          .forEach(filter -> System.out.println(filter.getClass().getName()));
}

执行上述代码,将输出所有注册的过滤器的类名。

五 重要过滤器

在 Spring Security 中,有几个过滤器扮演着特别重要的角色:

  • UsernamePasswordAuthenticationFilter:处理用户登录认证。
  • AnonymousAuthenticationFilter:在没有认证对象的情况下创建匿名认证,既匿名用户也是用户的一种。
  • AuthorizationFilter:当访问被拒绝时抛出异常(旧版是 FilterSecurityInterceptor)。
  • ExceptionTranslationFilter:捕获 Spring Security 的异常。

六 结论

通过本文,我们学习了如何通过不同的方法来发现 Spring Security 中注册的过滤器,包括启用安全调试、日志记录以及程序化获取。这些方法可以帮助开发者更好地理解和配置 Spring Security 的过滤器链。

如果小伙伴们想要深入全面的学习 Spring Security,可以看看我最近录的最新版的 Spring Security+OAuth2 视频教程,这是视频目录:

这套视频教程基本上把 Spring Security 的方方面面以及 OAuth2 都讲到了。最重要的是,贴合了很多小伙伴们日常常见的开发场景,比如短信验证码登录,微信 OAuth2 登录等等都有讲到。

这套视频是基于目前最新版的 Spring Security6 录制的,Spring Security6 在 API 层面的变化还是蛮大的,引入了大量的 Lambda 表达式去简化配置,很多旧版的写法在 Spring Security6 中被废弃,并在将来在 Spring Security7 中会移除相关的 API,所以说最近的 Spring Security 更新还是蛮激进的。

另一方面就是这套视频包含了全新的基于目前最新版 Spring Security 录制的 OAuth2 教程,松哥在 2020 年的时候出过图文版的 OAuth2 教程,但是,现在新版的 OAuth2 也有很多变化,不仅仅是 API 层面的变化,授权模式也发生了一些变化,传统的密码模式、简化模式现在都不再支持,转而引入了 PKCE 模式,并且利用 OIDC 简化用户信息获取。同时,在 2020 年还处于萌芽状态的 Spring Security OAuth2 Server 这个项目,目前也趋于成熟,也可以直接使用了,这些松哥都在视频中和大家做了详细介绍。在 OAuth2 环节我也和大家分享了如何使用微信的 OAuth2 登录。

总之这一套教程,让大家彻底理解系统的安全管理。

之前有小伙伴说我直接自己写过滤器,既灵活还简单。我并不反对这种做法,但是有一个前提就是你很牛,你自己写的过滤器有考虑到计时攻击,有考虑到 XSS 攻击,有考虑到点击劫持,有考虑跨站请求伪造。。。等等太多了。当然,这些问题如果你都没有考虑到,那么 Spring Security 都有帮你考虑到并提供解决方案!

理解了 Spring Security,再去看市面上其他的安全管理框架,都会豁然开朗。

这套教程目前给小伙伴们提供了两个试看视频:

这套视频是付费的,¥499,有需要的小伙伴加微信备注 499 上车。


相关推荐

  • GPT-4o 会带来哪些颠覆?
  • 如何攀上容量保障的珠峰?讲透全链路压测!
  • 2024 Vue 联邦大会,全明星阵容!探讨 Vue 的未来和问题
  • 你的 React 目录结构是啥样?
  • 30 天倒计时警告,Windows 10 21H2 末日即将来临!
  • 小米高管:支持禁止竞业禁止协议;微信月活 13.59 亿;腾讯混元文生图模型全面开源 | 极客头条
  • 编程 20 载,这位新加坡程序员靠 GPT 图解大模型火了
  • Google“反击战”,一夜放出近10款模型!上下文窗口卷到200万tokens、发布Sora竞品Veo、Android也变身了
  • 一款基于 GO 语言的轻量级视频终端下载项目,好强!
  • 无需OpenAI数据,跻身代码大模型榜单!UIUC发布StarCoder-15B-Instruct
  • 美国机器人应用遥遥落后?时隔15年,十所顶尖高校重启「国家机器人路线图」
  • GPT-4o干掉初创全网实测,马斯克Karpathy等大佬纷表不服:OpenAI不过如此
  • 谷歌2小时疯狂复仇,终极杀器硬刚GPT-4o!Gemini颠覆搜索,视频AI震破Sora
  • Docker Desktop 4.29 带来增强的容器隔离性、改进的错误管理界面以及与 Moby 26 的集成
  • 东软集团:生成式 AI 时代,如何布局 AI 人力资源战略?| DTDS 全球数字人才发展大会
  • “驯服”不受控的大模型,要搞定哪些事?| 专访达观数据副总裁王文广
  • 打磨三年、支持万亿 MoE,腾讯混元模型团队的真实推理实力到底如何?
  • 谷歌这次又“杀疯了”!200万token长文本能力问鼎全球最强,一场大会,AI被提了120次
  • 微软让MoE长出多个头,大幅提升专家激活率
  • GPT-4o深夜炸场!AI实时视频通话丝滑如人类,Plus功能免费可用,奥特曼:《她》来了