Spring Security基础:快速搭建安全认证系统(零基础入门)
开篇:Spring Security 是什么?我们为什么需要它?

你有没有想过,当你登录一个网站、购物平台或社交App的时候,后台是如何确认你是“真正的你”的呢?这就是身份验证和权限控制在起作用。
Spring Security 就是一个专门帮我们解决这些问题的框架。它是基于 Java 的,适用于使用 Spring 框架开发的应用程序(特别是后端接口)。
通俗点说,它就像一道门卫系统:
- 用户来访问资源时,它会先问:“你是谁?”(认证)
- 然后再看用户是不是有进入某个房间的权限(授权)
在这篇文章里,我会手把手带你们从零开始,用 Spring Security 快速搭建一个简单的安全认证系统,即使是编程小白也能理解并操作。
第一步:环境准备

1. 安装必要的软件
为了完成这个项目,你需要安装以下工具:
| 工具名称 | 下载地址 | 版本建议 |
|---|---|---|
| JDK | Oracle 或 OpenJDK | 17 |
| IntelliJ IDEA | JetBrains官网 | 社区版即可 |
| Maven | 如果你用的是IDEA,一般已内置 | 3.x以上 |
| Postman(API调试工具) | Postman官网 | 最新版本 |
2. 创建Spring Boot项目
我们可以使用 Spring Initializr 来快速生成项目结构:
打开网址,选择如下配置:
- Project: Maven
- Language: Java
- Spring Boot Version: 推荐 3.x(如 3.1)
- Dependencies: 勾选
Spring Web和Spring Security
点击 “Generate” 下载项目压缩包,解压后导入到 IntelliJ IDEA 中。
核心概念讲解(用小白语言解释)

Spring Security 虽然强大,但对我们来说有些概念很陌生。别担心,下面我会把它们简化成生活中的例子。
1. 认证(Authentication)
想象你在机场过安检时出示身份证,工作人员检查你的身份。
在Spring Security中,认证就是系统核对你是谁的过程。
比如:
- 输入用户名和密码
- 使用短信验证码
- 指纹识别等
2. 授权(Authorization)
还是那个机场的例子,出示身份证通过了安检后,你还得看看你能不能上飞机——只有持有机票的人才能登机。
授权就是判断你是否有权限访问某个资源或功能。
比如:
- 是否可以查看用户信息?
- 是否可以删除文章?
3. 过滤器(Filter)
你可以把它想成一个流水线上的“检测站”。每一个请求都要经过这些“安检口”,例如:
- 防止跨域攻击(CSRF)
- 验证 Token 合法性
- 处理登录请求
4. SecurityConfig 类
这是Spring Security的核心类,用来配置整个安全系统的规则,比如:
- 哪些路径需要登录?
- 使用什么样的登录方式?
- 错误处理怎么做?
实战演练:一步步搭建第一个安全应用

接下来,我们会创建一个最基础的安全认证系统,包含登录功能和不同权限控制。
步骤1:添加依赖(Maven)
如果你是手动创建项目,请确保 pom.xml 文件中包含这两个核心依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
步骤2:编写一个简单接口
我们在 src/main/java/[你的包名]/ 目录下创建一个 Controller:
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "你好,世界!";
}
}
启动项目后,默认访问 http://localhost:8080/hello 会报错 —— 因为被 Spring Security 保护起来了!
步骤3:配置 SecurityConfig 类
新建一个配置类 SecurityConfig.java:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").authenticated() // 要求登录才能访问
.anyRequest().permitAll()
)
.formLogin(withDefaults()) // 启用默认登录表单
.logout(withDefaults()); // 默认登出功能
return http.build();
}
}
现在再运行项目,访问 /hello 时会跳转到登录页面!
Spring Security 给我们自动提供了登录界面,用户名是 user,密码在日志中自动生成(类似 Using generated security password...),你可以查看控制台获取。
步骤4:设置自己的账号密码
修改 application.properties 添加:
spring.security.user.name=admin
spring.security.user.password=123456
重启服务,现在可以用 admin / 123456 登录了!
拓展功能:加入角色权限控制
我们来添加一些更高级的玩法 —— 角色权限。
修改 SecurityConfig 加入角色控制:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN") // admin开头的接口需 ADMIN 角色
.requestMatchers("/user/**").hasAnyRole("USER", "ADMIN") // user开头可由 USER或ADMIN访问
.anyRequest().permitAll()
)
.formLogin(withDefaults())
.logout(withDefaults());
return http.build();
}
然后我们修改账号信息,在 application.properties 设置两个用户及其角色:
spring.security.user.name=admin
spring.security.user.password=123456
spring.security.user.roles=ADMIN
# 新增另一个用户
spring.security.users[0].name=user1
spring.security.users[0].password=123456
spring.security.users[0].roles=USER
添加两个测试接口:
@GetMapping("/admin/dashboard")
public String adminDashboard() {
return "欢迎管理员";
}
@GetMapping("/user/profile")
public String userProfile() {
return "用户资料页";
}
试着用不同账号登录访问 /admin/dashboard 和 /user/profile,看看是否限制正确。
常见问题解答(FAQ)

Q1: 启动项目时提示找不到 SecurityConfig?
请确保你的 SecurityConfig 类上有 @Configuration 注解,并且位于主应用程序类能扫描到的包内。
Q2: 控制台没有显示随机生成的密码?
这是因为你自己设置了 spring.security.user.name 和 password,Spring就不会生成默认密码了。
Q3: 我用 POSTMAN 请求 /login 返回 403?
可能是缺少 CSRF 防护机制或 Session 缺失导致的。建议使用 Cookie + 表单提交登录方式。或者临时禁用 CSRF:
.csrf(AbstractHttpConfigurer::disable)
⚠️ 注意:生产环境不应禁用 CSRF!
Q4: 我想用数据库验证用户怎么办?
后面章节我们会讲到如何结合数据库做认证,比如通过 JPA 查询用户信息。
学习建议:下一步怎么学?
你现在掌握了 Spring Security 的基本使用,包括:
- 登录认证
- URL访问控制
- 角色权限设定
下一步建议你可以学习以下几个方向:
1. 自定义登录页面(替换默认表单)
学会自己设计美观的登录页面。
2. 数据库存储用户信息
使用 MySQL + Spring Data JPA 做用户持久化管理。
3. JWT 认证(无状态登录)
适合前后端分离项目,使用 Token 替换 Session。
4. OAuth2 & 单点登录(SSO)
了解主流企业的第三方登录机制。
小结
这篇文章我们一起完成了:
✅ 安装开发环境
✅ 创建 Spring Boot 项目
✅ 配置 Spring Security
✅ 实现登录与权限控制
✅ 了解核心概念
记住一句话:Spring Security 并不难,关键在于动手试!
如果你觉得有帮助,也可以收藏这篇教程反复回顾。下一章我们将继续深入,教你如何连接数据库做登录验证哦!
👉 下期预告:《Spring Security实战进阶:连接MySQL实现用户登录》
希望你继续关注我的系列教程,一起打怪升级!💪

评论 0