Spring Security 基础:快速搭建安全认证系统
一、开篇:什么是Spring Security?它是用来做什么的?

你有没有想过,当你在登录一个网站的时候,后台是怎么知道你是“谁”并且确保只有你能访问自己的账户呢?这就涉及到 安全控制 的问题。
而 Spring Security 就是 Java 开发中一个非常流行的安全框架。它的主要作用就是帮助我们实现:
- 用户登录验证(认证)
- 权限管理(授权)
- 防止非法访问
- 保护接口资源不被未授权用户使用
它就像是给我们的应用程序加了一道门禁系统:不是谁都能随便进来的。
不管你是一个刚接触后端开发的新手,还是打算提升技能的老手,学习 Spring Security 都是非常有必要的。今天我们就从零开始,一步步带你搭建一个最简单的安全认证系统!
二、环境准备:准备好开发工具和项目结构

要运行 Spring Security 项目,我们需要先安装一些开发环境。别担心,这一步其实很简单。
所需工具(推荐配置)
| 工具 | 版本 |
|---|---|
| JDK | 17(或其他长期支持版本) |
| IDE | IntelliJ IDEA 或 Eclipse |
| 构建工具 | Maven(或Gradle) |
| Spring Boot | 最新稳定版本 |
创建 Spring Boot 项目(Maven方式)
你可以用 https://start.spring.io 快速生成一个初始项目。
步骤如下:
- 打开 https://start.spring.io
- 选择以下配置:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新版(例如 3.x)
- Group: com.example
- Artifact: security-demo
- 添加依赖(Dependencies):
- Spring Web
- Spring Security
- 点击 Generate 按钮下载项目压缩包
- 解压后导入到你的 IDE 中
恭喜!你现在已经有了一个带 Spring Security 支持的基础项目了。
三、核心概念:简单易懂地了解关键概念

虽然我们马上就要写代码了,但先来理解几个基础的概念会让你更清楚整个系统的运作机制。
1. 认证(Authentication)
这是确认用户身份的过程。就像你刷身份证进门一样。常见的认证方式包括:
- 用户名+密码登录
- Token令牌认证(比如微信扫码登录)
- OAuth 第三方登录(如QQ、微信登录)
2. 授权(Authorization)
认证之后,我们要判断这个用户能不能访问某个功能或页面,这就是授权。
举个例子:老师可以查看学生成绩,但学生不能查看其他人的成绩。这就是授权的体现。
3. 角色(Role)与权限(Authority)
- 角色 是一种分类方式,比如
ROLE_USER,ROLE_ADMIN - 权限 更细粒度,比如
"read_profile","delete_user"
一个角色可以拥有多个权限。
4. 安全过滤链(Security Filter Chain)
这是一个处理安全请求的流程链路。你可以把它看作是一道道安检门,每一个环节都负责检查是否合法。
四、实战项目:跟着教程一步步完成一个简单项目

好啦,下面我们将动手创建一个 Spring Security 项目的最小可运行示例。
我们将实现的功能:
- 用户访问
/hello接口时需要登录 - 提供一个默认的用户名和密码用于登录
- 通过浏览器弹出登录框的方式进行认证
注意:这里是演示用的最简模型,生产环境中密码必须加密存储。
第一步:编写 HelloController(用于测试)
在 src/main/java/com/example/securitydemo 目录下创建控制器文件:
package com.example.securitydemo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "你好,欢迎来到受保护的世界!";
}
}
第二步:配置 Spring Security
新建配置类 WebSecurityConfig.java:
package com.example.securitydemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class WebSecurityConfig {
// 配置安全规则
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").authenticated()
)
.formLogin(withDefaults()); // 使用默认的登录表单
return http.build();
}
// 创建一个内存中的用户
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetailsManager(
User.withUsername("admin")
.password("{noop}123456") // {noop}表示不加密,仅做测试
.roles("USER")
.build()
);
}
}
第三步:启动项目并访问测试
运行 Spring Boot 应用,打开浏览器访问地址:
http://localhost:8080/hello
你会发现自动跳转到了一个登录页面,默认的用户名是 admin,密码是 123456。
成功登录后你会看到:
你好,欢迎来到受保护的世界!
太棒了!你已经完成了第一个基于 Spring Security 的安全认证项目!
五、常见问题解答:新手最容易卡住的问题及解决方案
Q1:输入正确用户名和密码也登录不了怎么办?
可能原因:
- 密码没有加
{noop},导致 Spring Security 默认认为你用了加密方式 - 用户没有启用,或者角色配置错误
- 浏览器缓存了旧的登录信息,尝试无痕模式重新登录
解决方法:
- 检查密码前是否有
{noop} - 使用最新版本 Spring Boot 和对应的配置语法
Q2:登录成功后又跳回登录页?
这种情况通常是因为:
- 登录过程中发生了异常或错误
- 路径匹配规则有问题
建议:
- 启动时查看控制台日志输出
- 添加
.debug()方法开启详细调试信息:
.formLogin(login -> login.defaultSuccessUrl("/hello"))
.debug(); // 开启安全调试模式
Q3:怎么自定义登录界面?
你可以自己写一个 HTML 页面作为登录页面。只需要添加如下配置:
.formLogin(login -> login
.loginPage("/my-login.html")
.permitAll()
);
然后提供一个静态资源页面即可。
Q4:我可以用数据库来做用户认证吗?
当然可以!Spring Security 提供了灵活的扩展接口:
- 实现
UserDetailsService接口 - 在数据库中查询用户信息
- 返回带有角色和权限的用户对象
我们在下一节会提到如何整合数据库进行认证。
六、学习建议:下一步该往哪走?
现在你已经掌握了最基本的认证流程,接下来可以继续深入以下几个方向:
方向一:使用数据库做登录验证
学习目标:
- 整合 MySQL + MyBatis/ JPA
- 自定义 UserDetailsService
- 查询数据库获取用户信息
示例知识点:
- 数据库表设计:用户、角色、权限关系表
- 密码加密:BCryptPasswordEncoder
方向二:前后端分离场景下的登录(如Vue+Spring Boot)
学习目标:
- 不再使用 FormLogin 表单登录
- 使用 JSON 格式传输用户名和密码
- 处理跨域问题
需要用到的知识点:
- CORS 配置
- 替换为自定义的 LoginFilter
- 返回 JSON 错误信息
方向三:OAuth2、JWT 与单点登录
如果你未来想做企业级应用,这些高级技术必不可少:
- JWT(JSON Web Token)
- OAuth2 认证协议
- 单点登录(SSO)
- Spring Security 与 Spring Cloud Gateway 结合使用
总结回顾
在这篇文章中,我们一起:
- 了解了 Spring Security 是什么及其核心功能
- 搭建了 Spring Boot + Spring Security 的开发环境
- 动手实现了第一个安全认证系统
- 学习了认证、授权、角色、安全链等核心概念
- 遇到了新手容易犯的典型错误,并给出了解决方案
- 展望了后续学习的方向
只要你按照这个路径一步步走下去,相信很快你也能写出安全可靠的企业级后端系统!
如果文章对你有所帮助,请点赞、收藏,也可以关注我获取更多Spring系列内容!
祝你学习愉快,早日成为 Java 后端安全领域的高手💪

评论 0