Spring Security 是一个功能强大且高度可定制的 Java 安全框架,用于保护基于 Spring 的应用程序。`spring-security-web` 和 `spring-security-core` 是 Spring Security 的两个主要模块,它们各自承担不同的职责:
### spring-security-core
1. **核心安全机制**:`spring-security-core` 模块包含 Spring Security 的核心安全机制,如认证(Authentication)和授权(Authorization)。
2. **认证管理**:提供认证管理器(`AuthenticationManager`)用于处理认证过程。
3. **权限**:包含权限评估器(`PermissionEvaluator`)和投票器(`AccessDecisionVoter`)等,用于确定用户是否有权执行特定操作。
4. **用户信息**:定义了 `UserDetails` 和 `UserDetailsService` 接口,用于获取和加载用户特定信息。
5. **密码加密**:提供密码加密和存储的机制,如 `PasswordEncoder` 接口。
6. **核心配置**:包含核心安全配置类,如 `AuthenticationConfiguration`。
### spring-security-web
1. **Web 安全**:`spring-security-web` 模块专注于为基于 Web 的应用程序提供安全支持。
2. **HTTP 安全**:提供 `HttpSecurity` 配置类,用于配置基于 HTTP 的安全策略,如请求的拦截和过滤。
3. **CSRF 保护**:包含跨站请求伪造(CSRF)保护机制。
4. **头部安全性**:提供各种安全相关的 HTTP 头部设置,如 X-Content-Type-Options、X-XSS-Protection 等。
5. **Session 管理**:支持会话管理,包括会话固定保护和并发会话控制。
6. **认证过滤器**:提供一系列的过滤器(如 `UsernamePasswordAuthenticationFilter`、`BasicAuthenticationFilter` 等),用于处理不同类型的认证请求。
7. **异常处理**:定义了针对 Web 应用程序的异常处理机制,如 `AccessDeniedHandler` 和 `AuthenticationEntryPoint`。
### 区别
- `spring-security-core` 是 Spring Security 的基础,提供了认证和授权的核心机制,不依赖于任何特定的应用程序类型或环境。
- `spring-security-web` 建立在 `spring-security-core` 之上,专门为 Web 应用程序提供额外的安全特性,如基于 HTTP 的请求处理、CSRF 保护等。
### 使用场景
- 如果你正在开发一个非 Web 应用程序,如一个服务层或命令行工具,你可能只需要使用 `spring-security-core`。
- 如果你正在开发一个 Web 应用程序,你将需要使用 `spring-security-web`,因为它提供了处理 Web 请求所需的特定功能。
在实际使用中,开发基于 Web 的 Spring Security 应用程序通常会同时依赖这两个模块,`spring-security-web` 用于处理 HTTP 请求的安全,而 `spring-security-core` 提供了底层的安全基础设施。
参考文档: