Spring Security 基础:快速搭建安全认证系统(适合零基础入门)
一、开篇:Spring Security 是什么?用来做什么?

在互联网世界里,用户登录和权限控制是非常常见的功能。比如你在购物网站下单前需要先“登录”,管理员账号能看到更多数据而普通用户看不到等等。
这时候,我们就需要用到一个工具来帮我们处理这些问题。这个工具就是——Spring Security。
简单来说:
🧱 Spring Security 是 Spring 家族中专门负责“安全”的组件。
🔐 它主要用于为 Java Web 应用程序提供**认证(登录)和授权(权限管理)**功能。
即使你是零基础的新手,只要你会一点点 Java 和 Spring Boot,就可以跟着本文一步步搭出属于自己的安全系统!
二、环境准备:你需要哪些工具和软件?

在开始动手写代码之前,请确保你的电脑已经安装了以下开发工具:
✅ 已安装工具清单:
| 工具名称 | 版本建议 | 用途说明 |
|---|---|---|
| Java JDK | 17 或以上 | 编写 Java 程序的基础 |
| IntelliJ IDEA | 社区版/专业版均可 | Java 开发的主流 IDE |
| Maven | 最新版或与IDE集成即可 | 构建项目依赖的工具 |
| Postman(可选) | 测试接口是否安全的工具 |
如果你没有这些工具,可以访问:
- Java:https://www.oracle.com/java/technologies/downloads/
- IntelliJ IDEA:https://www.jetbrains.com/idea/download/
三、核心概念:新手也能懂的安全知识

为了更好地理解 Spring Security,我们先来认识几个非常重要的概念:
1. 认证(Authentication)
💡 认证就是一个用户“验证自己身份”的过程,通常就是输入用户名和密码进行登录。
比如你在淘宝登录账号时,就是在做“认证”。
2. 授权(Authorization)
🔒 授权是判断“某个用户能不能访问某些资源”或者“执行某个操作”。
例如,普通用户不能访问后台管理页面,但管理员可以。
3. 用户详情服务(UserDetailsService)
这是 Spring Security 中的一个接口,用于加载用户的详细信息(如用户名、密码、角色等)。
我们会通过它来自定义我们的“登录逻辑”。
4. 密码加密器(PasswordEncoder)
🔐 为了安全,不能明文保存用户密码。所以需要用 BCryptPasswordEncoder 来对密码进行加密处理。
四、实战项目:从零搭建一个简单的登录认证系统

下面我们来一步一步搭建一个 Spring Boot + Spring Security 的简单项目。目标是实现:
✅ 能访问 /hello 页面
❌ 没有登录的话不允许访问 /secure 页面
✅ 可以注册账号,并用该账号登录系统
步骤 1:创建 Spring Boot 项目
你可以使用 Spring Initializr 创建一个新的项目:
- 项目类型选择 Maven Project
- Language 选 Java
- Spring Boot 版本选择较新的(如 3.x)
- 添加两个依赖项:
- Spring Web
- Spring Security
点击 Generate 下载生成的 zip 包后,在 IDEA 中导入为 Maven 项目。
步骤 2:添加基础 Controller
在 src/main/java/com.example.demo.controller 文件夹下新建一个控制器类:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello,欢迎来到公开页面!";
}
@GetMapping("/secure")
public String secure() {
return "只有登录用户才能看到的内容!";
}
}
运行项目后,在浏览器访问:
http://localhost:8080/hello→ 成功显示内容http://localhost:8080/secure→ 自动跳转到登录页(默认由 Spring Security 提供)
此时,你会看到一个登录界面(Spring Security 自带),但还无法用任何账户登录。我们需要自己配置用户体系。
步骤 3:配置自定义用户并开启登录功能
我们来配置内存中的用户账号:
修改 SecurityConfig.java(可能需要你手动创建),如下所示:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public UserDetailsService users() {
UserDetails user = User.builder()
.username("user")
.password(passwordEncoder().encode("123456"))
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").permitAll()
.anyRequest().authenticated()
)
.formLogin(withDefaults()) // 启用默认的登录表单
.logout(withDefaults());
return http.build();
}
}
现在重启项目,尝试访问:
👉 http://localhost:8080/secure
使用用户名 user 密码 123456 登录成功!
步骤 4:实现注册功能(简化版)
我们可以创建一个接口让用户注册:
@PostMapping("/register")
public String register(@RequestParam String username, @RequestParam String password) {
System.out.println("收到注册请求:" + username + ", " + password);
return "注册成功!暂未接入真实数据库";
}
注意:真正的注册功能需要将用户信息存入数据库,这里只是示例。
五、常见问题解答(FAQ)
❓Q1:为什么我设置了用户还是登不进去?
🔍检查点:
- 是否用了正确的用户名和密码?
- 是否忘记加上
.roles("USER")? - 是否调用了
.passwordEncoder()加密?
❓Q2:为什么 /hello 不用登录就能访问?
✔️因为我们在配置文件中加了:
.requestMatchers("/hello").permitAll()
意思就是无需登录就可以访问。
❓Q3:怎样退出登录?
/logout 默认启用,直接访问: 🔗 http://localhost:8080/logout 即可退出。
❓Q4:密码能不用加密吗?
🚫 不推荐。明文保存密码非常危险。务必使用 BCryptPasswordEncoder 进行加密。
六、学习建议:下一步该怎么继续深入?
你现在学会了:
✅ 如何使用 Spring Security 实现基本登录
✅ 如何区分公开页面和受保护页面
✅ 如何注册一个用户并自动加密密码
接下来,你可以继续学习:
📌 进阶方向:
- 把用户数据存在数据库(如 MySQL)+ 使用 Spring Data JPA
- 配置基于角色的访问控制(例如:ADMIN 角色才可以访问 /admin)
- 学习 JWT(JSON Web Token)实现无状态登录
- 学习 OAuth2 第三方登录(如微信、QQ)
- 结合 Thymeleaf 做一个完整前端+后端登录系统
📚 推荐学习资料:
- Spring Security 官方文档:https://docs.spring.io/spring-security/reference/index.html
- B站免费视频《Spring Security零基础入门》系列
- 极客时间专栏《轻松学 Spring Boot 全栈开发》
总结
在这篇教程中,我们一起完成了:
- 理解 Spring Security 是做什么的
- 准备好了开发环境
- 学习了几个关键的核心概念
- 动手搭建了一个最简单的安全认证系统
- 解答了一些新手容易踩坑的问题
- 为你规划了进一步的学习路径
只要坚持练习,你也一定能成为一名合格的后端开发者!如果你觉得这篇教程有用,欢迎分享给你的同学、朋友,让我们一起学习成长!
🎯 学完别忘了动手敲一遍代码,有问题可以在评论区留言讨论哦 😎

评论 0