spring security整体架构

发布于:2025-03-28 ⋅ 阅读:(24) ⋅ 点赞:(0)

Spring Security 的整体架构设计为模块化、可扩展的安全框架,其核心围绕 过滤器链安全上下文 展开,支持多样化的认证与授权机制。以下是其架构的核心组件及协作流程:


1. 核心架构图

HTTP 请求 → [Security Filter Chain] → 资源访问
       ↑           ↓
   认证(Authentication) ←→ 授权(Authorization)
       ↑           ↓
   用户凭证(Credentials) → 安全上下文(SecurityContext)

2. 核心组件与职责

(1) 过滤器链(Security Filter Chain)

作用:拦截所有 HTTP 请求,按顺序执行安全逻辑。
关键过滤器
SecurityContextPersistenceFilter:从存储(如 Session)加载或创建安全上下文。
UsernamePasswordAuthenticationFilter:处理表单登录请求。
OAuth2LoginAuthenticationFilter:处理 OAuth2 第三方登录。
AnonymousAuthenticationFilter:为未认证用户赋予匿名身份。
ExceptionTranslationFilter:处理认证/授权异常(如跳转登录页或返回 403)。
FilterSecurityInterceptor:执行最终访问控制决策(授权)。

(2) 认证体系(Authentication)

AuthenticationManager:认证入口,委托给具体的 AuthenticationProvider
AuthenticationProvider:实现特定认证逻辑(如数据库、LDAP、OAuth2)。

public interface AuthenticationProvider {
    Authentication authenticate(Authentication auth) throws AuthenticationException;
    boolean supports(Class<?> authentication);
}

UserDetailsService:加载用户数据(如从数据库查询用户)。

(3) 授权体系(Authorization)

AccessDecisionManager:协调投票器(Voter)决定是否允许访问资源。
AccessDecisionVoter:根据权限规则投票(如基于角色、IP、时间)。
安全表达式:通过 @PreAuthorize("hasRole('ADMIN')") 定义方法级权限。

(4) 安全上下文(SecurityContext)

SecurityContextHolder:存储当前用户的认证信息(Authentication 对象)。
• 默认使用 ThreadLocal 保存上下文,支持跨请求的线程安全。

(5) 配置体系(Configuration)

HttpSecurity:配置 URL 级别的访问规则、认证方式、CSRF 等。

http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
    .formLogin(Customizer.withDefaults());

WebSecurity:配置全局安全行为(如忽略静态资源)。


3. 核心流程

(1) 认证流程
  1. 用户提交凭证(如用户名密码、OAuth2 Token)。
  2. 过滤器拦截请求,提取凭证并创建 Authentication 对象。
  3. AuthenticationManager 调用匹配的 AuthenticationProvider 进行认证。
  4. 认证成功后,将 Authentication 对象存入 SecurityContextHolder
(2) 授权流程
  1. 用户访问受保护资源(如 /admin)。
  2. FilterSecurityInterceptor 调用 AccessDecisionManager
  3. AccessDecisionManager 收集所有 AccessDecisionVoter 的投票结果。
  4. 根据投票结果决定是否放行(如所有 Voter 通过则授权成功)。

4. 模块化设计

Spring Security 按功能拆分为独立模块,按需引入:

模块 功能
spring-security-core 基础认证、授权、加密工具
spring-security-web Web 安全(过滤器链、CSRF 防护)
spring-security-oauth2 OAuth2 客户端与资源服务器支持
spring-security-ldap LDAP/AD 集成
spring-security-test 单元测试支持(模拟用户、CSRF 禁用)

5. 扩展性设计

自定义认证:实现 AuthenticationProvider 支持新认证方式(如短信验证码)。
自定义权限规则:实现 AccessDecisionVoter 或使用 SpEL 表达式。
动态权限管理:结合数据库动态加载 URL 权限规则。


6. 与 Spring 生态集成

依赖注入:通过 @Autowired 注入安全组件(如 UserDetailsService)。
AOP 支持:通过 @PreAuthorize 实现方法级安全控制。
Spring Boot 自动配置:自动配置默认安全规则(如生成默认登录页)。


总结

Spring Security 的架构通过 过滤器链分层组件 实现灵活的安全控制,核心特点包括:
模块化:按需选择功能模块(如 OAuth2、LDAP)。
可扩展:支持自定义认证、授权逻辑。
无缝集成:与 Spring 生态深度整合,简化配置。

通过理解其架构,可快速定位安全问题(如过滤器顺序、权限配置错误),并高效实现复杂安全需求。