第一章 初识安全框架
本章将带领读者创建一个全新的 Spring Boot 项目并引入 Spring Security,体验框架的默认安全机制。
在 Web 应用开发中,用户认证与授权是基础且核心的功能模块。当我们在一个空白的 Spring Boot 项目中引入 Spring Security 依赖后,系统会自动生成登录页面并保护所有接口。这种"开箱即用"的安全防护是如何实现的?本篇文章将为你揭晓答案。
一、问题切入
假设我们创建了一个最简单的 Spring Boot Web 项目,添加了一个 REST 接口:
@RestController
public class SecurityController {
@RequestMapping("/security")
public String hello() {
return "hello world";
}
}
启动项目后,访问 http://localhost:8080/security,会发生什么?
答案是:浏览器会强制重定向到一个登录页面,要求输入用户名和密码。无需编写任何安全相关代码,Spring Security 已经自动为我们"保护"了整个应用。
这种自动保护是如何做到的?我们又该如何自定义?
二、解决方案:引入依赖即可
在 pom.xml 中添加以下核心依赖:
<dependencies>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
仅需引入这两个依赖,Spring Security 便会在应用启动时自动配置一套完整的安全防护体系。
三、原理阐释
3.1 Spring Security 核心特性
根据 Spring Security 官方文档,该框架提供以下核心特性:
- Authentication(认证):验证用户身份,确认登录者是谁
- Authorization(授权):决定用户可以访问哪些资源
- 攻击防护:防止 session fixation、clickjacking、CSRF 等攻击
- Servlet API 集成:与 Java Servlet 完美整合
- 可选的 Spring Web MVC 集成
3.2 核心过滤器
当 spring-boot-starter-security 被引入后,Spring Security 会自动配置一组过滤器(Security Filter Chain):
过滤器
作用
SecurityContextPersistenceFilter
持久化安全上下文
HeaderWriterFilter
写入安全响应头
LogoutFilter
处理登出请求
UsernamePasswordAuthenticationFilter
处理表单登录认证
DefaultLoginPageGeneratingFilter
生成默认登录页
DefaultLogoutPageGeneratingFilter
生成默认登出页
CsrfFilter
防止跨站请求伪造
AuthorizationFilter
权限检查
3.3 请求处理流程
用户访问受保护资源
↓
Security Filter Chain(层层过滤)
↓
未认证? → 重定向到 /login 登录页
↓
已认证 → 放行到目标 Controller
3.4 默认用户管理器
框架默认使用 InMemoryUserDetailsManager,用户信息通过配置文件指定。这是一种仅适用于开发测试的简单用户管理方式。
四、配置默认用户
在 application.yml 中指定默认用户:
spring:
application:
name: springsecurity-flittly
security:
user:
name: flittly
password: 123456
server:
port: 8080
或者在 application.properties 中:
spring.security.user.name=flittly
spring.security.user.password=123456
五、登录验证
完成以上配置后,启动项目:
- 访问
http://localhost:8080/security - 浏览器自动重定向到
http://localhost:8080/login - 显示 Spring Security 默认登录页面
- 输入用户名
flittly,密码123456 - 登录成功,显示 "hello world"
六、安全防护机制
Spring Security 默认启用以下安全防护:
- CSRF 防护:防止跨站请求伪造
- Security Headers:添加安全响应头
- Session Fixation 防护:防止会话固定攻击
- 默认安全行为:所有端点需要认证
七、总结
通过本篇文章,我们了解到:
- 仅需引入
spring-boot-starter-security依赖,系统即刻获得安全防护 - 框架自动配置一组安全过滤器(Security Filter Chain)
- 默认用户通过配置文件指定(仅适用于开发测试)
- 提供认证(Authentication)和授权(Authorization)两大核心功能
- 内置多种安全攻击防护机制
下一篇文章我们将介绍如何整合 MyBatis,实现基于数据库的用户认证。
编辑者:Flittly
更新时间:2026年4月