Skip to content

Spring Security

你知道吗?每年因为权限控制不当导致的数据泄露事件中,有相当一部分是因为没有正确配置安全框架。

Spring Security 是 Spring 生态中最核心的安全框架,它不仅仅是「登录功能」那么简单——它解决的是 「谁可以做什么」 这个最根本的问题。

从表单登录到 OAuth2,从 Session 会话到 JWT 无状态认证,从 CSRF 防护到细粒度权限控制——Spring Security 几乎涵盖了企业级应用安全的方方面面。

但正因为它功能强大、配置复杂,很多人对它是「既爱又恨」:爱它的功能完善,恨它的学习曲线陡峭。

这个模块,就是要把 Spring Security 讲透。


模块总览

🔐 认证与授权核心流程

Spring Security 的认证和授权是怎么工作的?从请求进来到最终放行,经历了哪些环节?

这一篇是整个模块的「总地图」,帮你建立完整的知识框架。

🔍 过滤器链

Spring Security 本质上是一系列 Filter 的组合。你知道 SecurityFilterChain 是如何组装的?FilterChainProxy 又是如何分派的?

理解过滤器链,是理解 Spring Security 工作原理的钥匙。

⚙️ 配置方式演进

WebSecurityConfigurerAdapter 到 Lambda DSL,Spring Security 6.x 的配置方式发生了翻天覆地的变化。

这一篇帮你理清配置方式的演进脉络,让你能看懂不同版本的代码。

👤 认证机制

UserDetailsService 是自定义登录认证的核心。你知道如何从数据库加载用户信息?如何实现「记住我」功能?

认证是安全的入口,这一步必须搞清楚。

🔑 密码加密

密码应该怎么存?MD5 还安全吗?BCrypt 的工作因子是什么?

密码加密是入职第一课,也是最容易踩坑的地方。

📋 授权模型

Authority 和 Role 有什么区别?hasRole()hasAuthority() 用哪个?

授权模型决定了权限系统的天花板,这一步设计不好,后面全是坑。


学习路线

零基础入门

过滤器链与认证流程(理解原理)

表单登录 + Session 管理(搞定登录)

密码加密 + Remember-Me(完善认证)

RBAC + 方法级权限(搞定授权)

JWT 无状态认证(进阶实战)

OAuth2 第三方登录(接入登录生态)

微服务统一鉴权(分布式安全)

认证机制全景图

认证方式适用场景复杂度推荐度
表单登录传统 Web 应用⭐⭐⭐⭐⭐
Session 会话需要会话保持⭐⭐⭐⭐⭐
Remember-Me免登录功能⭐⭐⭐⭐⭐⭐
短信登录移动端⭐⭐⭐⭐⭐⭐
OAuth2 登录第三方登录⭐⭐⭐⭐⭐⭐⭐⭐
CAS 单点登录多系统统一登录⭐⭐⭐⭐⭐⭐⭐
JWT 无状态API / 移动端⭐⭐⭐⭐⭐⭐⭐⭐

授权与权限控制

注解方式

注解位置SpEL 支持推荐度
@Secured方法⭐⭐⭐
@RolesAllowed方法⭐⭐⭐
@PreAuthorize方法/类⭐⭐⭐⭐⭐
@PostAuthorize方法⭐⭐⭐

动态权限决策

场景方案说明
固定角色@PreAuthorize("hasRole('ADMIN')")简单场景
动态权限自定义 Voter需要查库
树状权限递归权限计算复杂业务

安全防护体系

Spring Security 不只是认证授权,还提供了一系列安全防护:

防护类型配置方式重要性
CSRF 防护CSRF Token⭐⭐⭐⭐⭐
CORS 跨域@CrossOrigin / 配置⭐⭐⭐⭐⭐
XSS 防护HttpFirewall⭐⭐⭐⭐
JWT 防盗用设备指纹 + IP 绑定⭐⭐⭐⭐

版本差异

版本重大变化说明
5.x密码编码器重构推出 PasswordEncoder 接口
6.0移除 WebSecurityConfigurerAdapter全面转向 Lambda DSL
6.1+默认禁用 CSRF 表单登录更安全的默认配置

Spring Security 6.x 有大量 breaking changes,如果你在维护旧项目,建议先看 6.x 新特性


相关模块


面试高频问题

问题难度涉及文档
Spring Security 过滤器链的执行顺序?⭐⭐过滤器链
Authentication 和 Authorization 的区别?核心流程
Session 和 JWT 哪种更好?⭐⭐⭐Session + JWT
如何自定义一个认证流程?⭐⭐自定义认证
RBAC 权限模型是什么?⭐⭐RBAC
CSRF 攻击的原理和防护方式?⭐⭐⭐CSRF

完整的面试问题汇总,请查看 Spring Security 面试高频问题汇总

基于 VitePress 构建