Spring Security基础:快速搭建安全认证系统
开篇:什么是Spring Security?

你有没有想过,为什么我们登录网站的时候,有些页面你能访问,有些页面你必须先登录?比如,你没登录就去访问“个人中心”,网站会提示你先登录。
这个背后的安全控制,其实就是由像 Spring Security 这样的框架来实现的。
👉 Spring Security 是什么?
它是一个为 Java Web 应用程序提供安全保护的框架。简单来说,它可以帮你实现:
- 用户登录验证(用户是否是合法用户)
- 权限管理(不同用户能做什么)
- 防止非法请求、伪造攻击等常见安全问题
🎯 本教程的目标: 我们将一起使用 Spring Boot 搭建一个最简单的 Spring Security 安全认证系统。即使你是编程新手,也能一步步跟着操作完成!
环境准备:开始之前你需要的东西

在开始写代码之前,我们需要准备好开发环境。别担心,步骤不复杂,跟着做就行。
✅ 所需软件:
JDK 8 或以上版本
Java 开发工具包,是运行 Java 程序的前提。IntelliJ IDEA(社区版即可)或 Eclipse
Java IDE(集成开发环境),推荐使用 IntelliJ IDEA。Maven
构建工具,用来自动下载依赖库。Postman 或 浏览器开发者工具(用于测试API)
🔧 步骤一:安装 JDK
如果你还不知道怎么安装 JDK,请搜索 “Java JDK 安装教程 + 你的操作系统” 就可以找到对应的指南。
✅ 检查是否安装成功:
java -version
🔧 步骤二:下载并安装 IntelliJ IDEA
前往官网:https://www.jetbrains.com/idea/
选择 Community 版本进行下载,然后按照提示安装即可。
📦 步骤三:创建一个新的 Spring Boot 项目
我们可以使用 Spring Initializr 快速生成项目骨架。
填写如下信息:
- Project: Maven
- Language: Java
- Spring Boot Version: 推荐 2.7.x(稳定版本)
- Group: com.example
- Artifact: securitydemo
- Name: securitydemo
- Packaging: Jar
- Java: 8 或以上
然后点击底部【ADD DEPENDENCIES】按钮,添加以下依赖:
- Spring Web(Web 开发)
- Spring Security(安全框架)
✅ 点击 Generate Project 下载 ZIP 文件,解压后用 IntelliJ IDEA 打开。
💻 项目结构说明(简单介绍)
打开项目之后,你会看到有一个主类 SecuritydemoApplication.java,看起来像这样:
@SpringBootApplication
public class SecuritydemoApplication {
public static void main(String[] args) {
SpringApplication.run(SecuritydemoApplication.class, args);
}
}
接下来我们就可以开始配置安全认证啦!
核心概念:了解几个关键概念,让理解更轻松

学习 Spring Security 并不需要一开始就记住一堆专业术语。我们先从几个最关键的概念讲起:
🔑 1. 认证 Authentication
认证就是确认用户的“身份”。比如你登录 QQ 的时候,输入账号密码,系统验证你的身份是否正确。
📌 类似于:“你是谁?” 的过程。
🛡️ 2. 授权 Authorization
授权是确定某个用户“能不能做某件事”。比如管理员可以删除文章,普通用户不行。
📌 类似于:“你能做什么?” 的过程。
👤 3. 用户 User
指的是应用程序中的一个个使用者。你可以把他们保存到数据库、文件,甚至内存中。
🧱 4. SecurityFilterChain
这是一个过滤链,相当于“门卫团队”,每当你访问一个页面时,都会经过这一系列的检查(比如是否登录、是否有权限)。
🔐 5. SecurityConfig
这是 Spring Security 的配置类,用来设置如何检查用户身份、哪些页面需要权限、使用哪种登录方式等。
这些概念听不懂也没关系,我们下面通过实际例子来理解它们是怎么工作的!
实战项目:动手搭建一个最简单的安全认证系统

我们要做的功能非常简单:所有页面都需要登录才能访问,默认用户名是 user,密码由系统自动生成。
第一步:编写安全配置类
新建一个配置类 SecurityConfig.java:
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.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.anyRequest().authenticated() // 所有请求都必须登录才能访问
)
.formLogin(); // 使用默认的登录表单
return http.build();
}
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
📌 解释:
.anyRequest().authenticated()表示所有请求都要登录才允许访问。formLogin()启用了默认的登录界面。- 我们定义了一个用户名是
user,密码是123456的用户。
第二步:编写一个简单的控制器
新建一个类 HomeController.java,展示一个简单的欢迎页面:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "欢迎来到安全世界!";
}
}
现在启动应用,访问 http://localhost:8080,你会发现跳转到了登录页面:
第三步:尝试登录看看效果
输入用户名:user,密码:123456,回车。
你应该能看到页面上显示一句话:
欢迎来到安全世界!
🎉 成功了!你现在拥有了一个带有登录验证的小型安全系统!
第四步:增加一个管理员角色并限制访问路径
我们再加一个管理员账户,并且只允许管理员访问 /admin 路径。
修改 SecurityConfig.java 中的 userDetailsManager() 方法:
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("admin123")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
然后在 HomeController.java 中添加一个管理员接口:
@GetMapping("/admin")
public String admin() {
return "管理员专属页面!";
}
再修改一下安全配置,让 /admin 只允许 ADMIN 角色访问:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/", "/login").permitAll() // 允许匿名访问
.requestMatchers("/admin").hasRole("ADMIN") // /admin 需要 ADMIN 角色
.anyRequest().authenticated()
)
.formLogin(); // 启用默认登录表单
return http.build();
}
重启项目后,分别使用 user 和 admin 登录,试试访问 /admin 页面。
user登录 → 提示没有权限admin登录 → 成功访问
🎯 到这里为止,你已经学会了:
- 如何启用登录验证
- 如何添加用户和角色
- 如何根据路径进行权限控制
常见问题解答
❓1. 登录总是失败怎么办?
- 检查用户名和密码是否正确(注意大小写)
- 确保
InMemoryUserDetailsManager中设置了正确用户 - 如果用的是加密密码,确保使用了匹配的加密方式(例如 Bcrypt)
❓2. 控制台输出中有乱码或者异常怎么办?
有可能是日志太多干扰了判断,也可以检查:
- 是否引入了冲突的依赖
- 是否重复定义了多个
SecurityConfig - 是否遗漏了一些必要的注解
❓3. 不想使用默认登录页怎么办?
可以在 SecurityConfig 中配置自定义登录页路径和登录处理逻辑(后续可以深入学习)。
❓4. 怎么退出登录?
访问 /logout 即可退出,Spring Security 自带此功能。
❓5. 用户信息从数据库获取怎么做?
后面我们会学习将用户信息存入 MySQL 数据库,使用 JPA + UserDetails 接口。
学习建议:下一步该学什么?
恭喜你完成了第一个 Spring Security 应用!接下来你还可以继续探索:
📘 阶段一:进阶知识
- 使用数据库存储用户信息(MySQL + JPA)
- 使用 JWT 实现无状态安全机制(适合前后端分离项目)
- 使用 OAuth2 接入微信/QQ/GitHub 登录
- 配置 HTTPS 安全连接
🧠 阶段二:综合实战项目
- 搭建博客系统:注册、登录、发表文章、权限管理
- 开发电商后台:订单管理、角色分级、敏感操作审计
- API 接口安全防护:防止重放攻击、限制接口频率等
结语:坚持才是进步的关键!
刚开始学 Spring Security 会觉得有点抽象,但只要多敲代码、多练项目,很快就能掌握它的核心用法。
📌 最重要的一句话送给新手朋友们:
不要怕犯错,也不要急着看懂全部原理;先把功能跑起来再说。
随着经验积累,你会发现 Spring Security 越用越顺手!
📚 附录:完整代码 GitHub 地址(虚拟链接供参考):
https://github.com/example/spring-security-demo
如你所愿,本文约 3030 字,内容通俗易懂,适合初学者入门 Spring Security!如果你觉得有用,不妨分享给其他正在努力学习的小伙伴吧 😄

评论 0