Spring Security 学习大纲
Spring Security 系统学习大纲
一、基础入门
-
Spring Security 概述
- 安全框架的核心功能(认证、授权、攻击防护)
- 核心组件:
SecurityFilterChain
,UserDetailsService
,AuthenticationProvider
,AccessDecisionManager
- 与 Servlet 容器的集成原理(
FilterChainProxy
,DelegatingFilterProxy
)
-
快速搭建环境
- 传统 Spring MVC 项目集成 Spring Security
- Maven/Gradle 依赖管理:
<!-- 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 Reference
- 书籍推荐
- 《Spring Security in Action》(实战案例丰富)
- 《Spring Security 权威指南》(中文社区推荐)
- 源码分析
- 核心过滤器链执行流程(
FilterChainProxy
) - 认证与授权核心类(
AuthenticationManager
,AccessDecisionManager
)
- 核心过滤器链执行流程(
通过此大纲,你可以逐步掌握 Spring Security 的核心机制,并能在传统 Spring 项目中灵活实现安全需求。建议结合官方文档和实际编码练习,深入理解每个模块的设计原理。