Spring Security 的默认配置
# Spring Security 的默认配置
前言
Spring Security 在引入后提供了一套默认的认证和授权机制,帮助开发者快速构建一个具有基本安全防护的应用。这套默认配置涵盖了认证、授权、CSRF 防护、登录页面生成等功能。
# 1. Spring Security 默认配置概述
Spring Security 在引入项目时,自动应用了一些默认的安全配置。以下是它默认提供的功能:
自动生成登录页面:
- 当用户访问受保护的资源时(如未公开的页面或 API 接口),Spring Security 会自动跳转到一个默认的登录页面,路径为
/login
。 - 该页面包含基本的用户名和密码输入框,并处理用户登录逻辑。
- 当用户访问受保护的资源时(如未公开的页面或 API 接口),Spring Security 会自动跳转到一个默认的登录页面,路径为
默认用户和密码:
- 系统默认创建一个用户名为
user
的用户。 - 密码是随机生成的,在应用启动时打印在控制台。每次启动应用时,这个密码都会重新生成。例如:
Using generated security password: 8a8e5d2a-4a8d-4bf2-b8b3-0d0f95b6b68d
1- 该默认用户具有访问所有受保护资源的权限。
- 系统默认创建一个用户名为
所有请求需要认证:
- Spring Security 默认要求所有 HTTP 请求都需要认证。除非你显式配置某些路径为公开访问,否则所有请求都会被保护,要求用户先登录。
表单登录:
- 默认启用了表单登录功能。当用户访问需要认证的资源但尚未登录时,系统会自动重定向到默认的登录页面
/login
。 - 登录成功后,系统会自动将用户重定向到原始请求的页面。如果用户直接访问
/login
并登录成功,则会跳转到根路径/
。
- 默认启用了表单登录功能。当用户访问需要认证的资源但尚未登录时,系统会自动重定向到默认的登录页面
注销功能:
- 默认启用了注销功能,用户可以通过访问
/logout
来退出登录。 - 注销成功后,系统会重定向到登录页面
/login?logout
,并显示一条提示信息。
- 默认启用了注销功能,用户可以通过访问
CSRF 防护:
- 默认情况下,Spring Security 自动启用 CSRF(跨站请求伪造)防护,保护表单提交和敏感操作免受 CSRF 攻击。
- CSRF 令牌会自动嵌入到表单中,确保每个表单提交的请求是合法且安全的。
HTTP 基本认证支持:
- Spring Security 还默认支持 HTTP Basic 认证,这种认证方式通常用于保护 REST API 接口。
- 通过在请求头中使用
Authorization: Basic <Base64编码的用户名和密码>
,Spring Security 会根据提供的凭据进行认证。
会话管理:
- 默认情况下,Spring Security 会在用户登录成功后创建一个会话,并将用户的认证信息保存在
SecurityContext
中。 - Spring Security 管理会话的生命周期,确保用户信息在多个请求之间保持一致。
- 默认情况下,Spring Security 会在用户登录成功后创建一个会话,并将用户的认证信息保存在
默认异常处理:
- 当用户尝试访问未授权的资源时,Spring Security 会返回一个默认的“403 Forbidden”错误页面。
- 当用户未登录但尝试访问受保护资源时,系统会自动重定向到登录页面。
# 2. 项目搭建与依赖配置
首先,你需要在 Spring Boot 项目中引入 Spring Security 依赖。Spring Security 的依赖配置如下:
pom.xml
配置:
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
添加上述依赖后,Spring Security 会自动应用默认配置,为你的应用提供基本的安全防护。
# 3. 默认行为验证
在默认配置生效的情况下,你可以通过以下步骤验证 Spring Security 的默认行为:
启动应用:
- 在未做任何自定义配置的情况下,启动 Spring Boot 应用。
访问受保护资源:
- 访问如
http://localhost:8080/
,系统会自动重定向到默认的登录页面/login
,要求你输入用户名和密码。
- 访问如
使用默认用户登录:
- 默认用户名:
user
- 密码:启动时控制台打印的随机密码。
- 默认用户名:
登录成功后验证:
- 登录成功后,系统会自动重定向到你尝试访问的受保护资源,或跳转到根路径
/
。
- 登录成功后,系统会自动重定向到你尝试访问的受保护资源,或跳转到根路径
注销:
- 访问
http://localhost:8080/logout
,你可以退出登录,并重定向回登录页面。
- 访问
CSRF 防护验证:
- 在表单提交时,CSRF 令牌会自动生成并嵌入到表单中。请求中必须包含有效的 CSRF 令牌,否则请求将被拒绝。
# 4. Spring Security 默认配置的扩展
虽然 Spring Security 的默认配置非常方便,但在实际项目中,你通常需要进行自定义配置。以下是一些常见的扩展需求:
- 自定义登录页面:替换默认的登录页面为自定义页面。
- 自定义用户认证:替换内存中的用户信息为数据库或其他来源的用户信息。
- 自定义路径访问控制:定义哪些路径可以匿名访问,哪些路径需要认证。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08