Spring Security 系统学习大纲
一、基础入门
-
Spring Security 概述
- 安全框架的核心功能(认证、授权、攻击防护)
- 核心组件:
SecurityFilterChain,UserDetailsService,AuthenticationProvider,AccessDecisionManager - 与 Servlet 容器的集成原理(
FilterChainProxy,DelegatingFilterProxy)
-
快速搭建环境
-
传统 Spring MVC 项目集成 Spring Security
-
Maven/Gradle 依赖管理:
xml<!-- Maven 示例 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>6.2.0</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>6.2.0</version> </dependency> -
最小化 XML 配置与 Java 配置对比(
WebSecurityConfigurerAdapter的替代方案)。
-
二、认证(Authentication)
-
内置认证方式
- 表单登录(
formLogin()) - HTTP Basic 认证(
httpBasic()) - 注销配置(
logout()) - 多用户存储配置(内存、JDBC、LDAP)
- 表单登录(
-
自定义认证逻辑
- 实现
UserDetailsService接口加载用户信息 - 密码加密与
PasswordEncoder(BCryptPasswordEncoder,Pbkdf2PasswordEncoder) - 自定义登录页、登录成功/失败处理器(
AuthenticationSuccessHandler,AuthenticationFailureHandler)
- 实现
-
高级认证场景
- 多因素认证(MFA)
- 记住我(Remember-Me)功能实现
- 集成 OAuth2 或 SAML(需额外依赖)
三、授权(Authorization)
-
请求级别授权
HttpSecurity配置 URL 匹配规则(antMatchers,regexMatchers)- 角色(
hasRole)与权限(hasAuthority)控制 - 动态权限加载(基于数据库或外部服务)
-
方法级别授权
- 注解驱动控制:
@PreAuthorize,@PostAuthorize,@Secured - 全局方法安全配置(
@EnableGlobalMethodSecurity) - 自定义权限表达式(
@PreAuthorize("hasPermission(...)"))
- 注解驱动控制:
-
动态权限决策
- 自定义
AccessDecisionVoter实现复杂投票逻辑 - 扩展
PermissionEvaluator实现细粒度权限控制
- 自定义
四、高级安全配置
-
会话管理
- 会话固定攻击防护(
sessionManagement().sessionFixation()) - 并发会话控制(最大会话数、过期策略)
- 会话固定攻击防护(
-
CSRF 与 CORS
- CSRF 防护原理及禁用场景
- 跨域请求配置(
CorsConfigurationSource)
-
安全头部(Headers)
- 配置安全响应头(X-Content-Type-Options, X-Frame-Options 等)
- 自定义头部策略(
headers().contentSecurityPolicy())
-
异常处理
- 自定义
AuthenticationEntryPoint处理未认证请求 - 实现
AccessDeniedHandler处理权限拒绝
- 自定义
五、扩展与定制
-
自定义过滤器
- 添加自定义
Filter到 Security 过滤器链 - 实现 JWT 认证过滤器(无 Spring Boot 依赖)
- 添加自定义
-
事件监听
- 监听认证成功/失败事件(
AuthenticationSuccessEvent,AuthenticationFailureEvent)
- 监听认证成功/失败事件(
-
LDAP 与 Active Directory 集成
- 配置
LdapAuthenticationProvider实现企业级认证
- 配置
-
测试与调试
- 使用
@WithMockUser模拟用户测试 - 调试 Security 过滤器链(日志级别配置)
- 使用
六、实战项目
-
场景一:传统 Web 应用安全
- 实现基于数据库的用户认证与 RBAC(角色权限模型)
- 动态菜单渲染(根据用户角色显示不同菜单)
-
场景二:REST API 安全
- 无状态认证(JWT + Spring Security)
- 接口级别的细粒度权限控制(
@PreAuthorize)
-
场景三:前后端分离安全
- 跨域配置与 Token 管理
- 自定义认证响应格式(JSON 替换默认登录页)
七、常见问题与调试
-
典型错误分析
403 Forbidden的排查步骤- 循环重定向问题(登录页与权限配置冲突)
-
安全配置陷阱
- 静态资源权限放行(
permitAll()未生效) - 注解不生效(
@EnableGlobalMethodSecurity缺失)
- 静态资源权限放行(
-
日志与监控
- 启用 Security Debug 日志(
logging.level.org.springframework.security=DEBUG) - 审计日志记录关键操作(
AuditListener)
- 启用 Security Debug 日志(
八、扩展学习资源
- 官方文档
- 书籍推荐
- 《Spring Security in Action》(实战案例丰富)
- 《Spring Security 权威指南》(中文社区推荐)
- 源码分析
- 核心过滤器链执行流程(
FilterChainProxy) - 认证与授权核心类(
AuthenticationManager,AccessDecisionManager)
- 核心过滤器链执行流程(
通过此大纲,你可以逐步掌握 Spring Security 的核心机制,并能在传统 Spring 项目中灵活实现安全需求。建议结合官方文档和实际编码练习,深入理解每个模块的设计原理。