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

大家好!如果你是第一次听说 Spring Security,那恭喜你即将进入一个强大的 Java 安全框架的世界。Spring Security 是用于保护基于 Spring 的应用程序的官方安全框架。简单点说,它就是你程序里的“保安”,可以防止未经授权的人访问你的系统。
想象一下:
- 你在做一个网上商城系统,用户只有登录后才能下单。
- 你在做公司内部管理系统,不同角色(比如管理员、普通员工)能看到不同的数据。
这些场景都需要我们对“谁有权限访问”进行管理和控制,这就是 安全认证与授权的工作。而 Spring Security 就是专门来帮你解决这些问题的好帮手。
在本篇文章中,我们将从零开始,通过一步步实战操作,教你搭建一个具备基本登录验证功能的小项目。即使你是完全的编程小白,也能轻松上手!
二、环境准备:搭建开发环境(Windows/Mac通用)

要使用 Spring Security,我们需要先准备好开发工具和运行环境。我们推荐以下组合:
✅ 所需软件清单:
| 工具 | 版本要求 |
|---|---|
| Java JDK | ≥ 11 |
| IntelliJ IDEA 或 Eclipse | 推荐用 IDEA 社区版 |
| Maven | 自动集成(IDE内置) |
| Spring Boot | 2.x 或 3.x(教程兼容) |
步骤 1:安装 Java JDK
你可以去官网下载并安装 Java 开发工具包(JDK)。建议选择 Oracle JDK 或开源版本 OpenJDK。
安装完成后,在命令行执行下面命令检查是否成功:
java -version
javac -version
输出结果类似于:
openjdk version "17.0.7" 2023-04-18
说明安装成功。
步骤 2:安装开发工具(IDE)
推荐新手使用 IntelliJ IDEA Community Edition,它是免费的,并且对 Spring 支持非常好。
👉 下载地址:https://www.jetbrains.com/idea/download/
安装后打开,就可以开始我们的项目啦!
三、核心概念:通俗易懂讲明白关键术语

Spring Security 虽然强大,但也有一些常见的术语需要理解。我们用生活中的例子类比讲解:
🔐 用户认证(Authentication)
就像进小区门禁刷脸或刷卡的动作 —— 验证你是不是你。
在 Spring Security 中,最简单的做法是让用户输入用户名和密码,然后判断是不是合法用户。
🧾 用户授权(Authorization)
确认了你是谁之后,还要判断你能干什么。比如:
- 普通用户只能看商品
- 管理员还能编辑和删除
Spring Security 可以根据用户的角色(Role)来限制其能访问哪些网页接口。
👤 用户、角色、权限模型
这个模型类似一个企业的组织结构:
- 用户 = 员工
- 角色 = 岗位(如:程序员、产品经理)
- 权限 = 具体能做的事(如:查看订单、修改库存)
💼 过滤器(Filter)
Spring Security 使用多个过滤器来处理请求。每个请求进来之前都要过几关检查,比如有没有登录、有没有权限等。
四、实战项目:跟着一起做 —— 创建一个安全的 Web 应用

我们现在就要创建一个 Spring Boot Web 项目,并加入 Spring Security 实现登录验证功能。
步骤1:创建项目
使用 Spring Initializr 快速生成项目骨架:
填写如下信息:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版本(如 3.1.x)
- Group: com.example
- Artifact: securitydemo
- Packaging: Jar
- Dependencies:
- Spring Web(用于构建Web应用)
- Spring Security(安全模块)
点击【Generate】按钮下载 ZIP 文件,解压后用 IntelliJ IDEA 打开即可。
步骤2:添加首页控制器
我们先写一个简单页面 /hello,测试网站是否正常工作。
新建文件 src/main/java/com/example/securitydemo/controller/HomeController.java:
package com.example.securitydemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/hello")
public String sayHello() {
return "你好,欢迎来到 Spring Security 教程!";
}
}
运行项目后访问 http://localhost:8080/hello,你应该会看到:
你好,欢迎来到 Spring Security 教程!
🎉 恭喜你完成第一步!
步骤3:启用 Spring Security 保护
现在,我们要给这个项目加上登录验证功能。
第一步:引入配置类
创建一个新的 Java 类文件:
src/main/java/com/example/securitydemo/config/SecurityConfig.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.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
// 添加两个内存中的用户(测试用途)
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails user = User.builder()
.username("user")
.password("{noop}123456") // {noop} 表示明文密码
.roles("USER")
.build();
UserDetails admin = User.builder()
.username("admin")
.password("{noop}admin123")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
// 定义安全策略
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").authenticated()
.anyRequest().permitAll())
.formLogin(login -> login
.loginPage("/login")
.permitAll())
.logout(logout -> logout
.permitAll());
return http.build();
}
}
上面代码做了两件事:
- 配置了两个测试用户(用户名分别是 user 和 admin)
- 给
/hello页面加上了访问验证
第二步:添加登录页面
虽然我们可以直接使用 Spring 提供的默认登录页面,但为了更直观,我们手动创建一个。
创建目录结构:
src/main/resources/templates/
并在这个目录下创建一个叫 login.html 的文件,内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<h3>请登录</h3>
<form method="post" action="/login">
用户名:<input type="text" name="username"><br><br>
密码:<input type="password" name="password"><br><br>
<button type="submit">登录</button>
</form>
</body>
</html>
这样,当我们访问 /hello 页面时,就会跳转到 /login 页面,让用户登录。
第三步:重启服务,测试效果
重新启动应用,再次访问 http://localhost:8080/hello,你会被自动重定向到 /login 页面:
✅ 用刚才定义的账号试试登录:
- 用户名:user / 密码:123456
- 或者:admin / admin123
如果登录成功,就能看到 Hello 页面的内容啦!
五、常见问题解答(FAQ)
很多小伙伴在学习过程中会遇到一些疑问,下面是几个新手最容易踩坑的问题,快来看有没有你关心的👇
❓1. 我输入正确的用户名和密码为什么还无法登录?
可能原因:
- 输入错误(注意大小写)
- 密码加密方式没处理正确(这里我们使用
{noop}表示不加密,后面学多了再换成加密存储) - 控制台是否有报错日志?比如 Bad credentials 错误
🔍 解决方法:
- 查看控制台输出,确认是否有认证失败提示
- 再次核对用户名和密码是否正确
❓2. 为什么我看不到自定义的登录页面?
检查点:
- 是否将模板放在了
src/main/resources/templates/目录下? - 登录页面的名字是否叫
login.html? - 是否在 Security 配置中设置了
.loginPage("/login")?
❓3. 启动时报错 Could not initialize class javax.crypto.KeyGeneratorSpi?
这类错误多出现在 macOS 或 Linux 上,因为部分 JRE 缺少某些加密组件。
✅ 解决方案:
- 使用 OpenJDK 安装包而不是精简版
- 确保你的 JDK 是完整版(可以通过 SDKMAN! 或 Homebrew 安装)
六、学习建议:下一步该学什么?
恭喜你完成了本次入门教程!接下来你可以沿着以下路径继续深入学习:
🔹 进阶方向1:数据库存储用户信息
目前我们使用的是内存中的用户信息,实际项目中需要连接 MySQL 或 Postgres 数据库,存储用户账户信息。
建议学习知识点:
- Spring Data JPA(数据库操作)
- BCryptPasswordEncoder(加密密码)
- 自定义 UserDetailsService
🔹 进阶方向2:RBAC 权限管理模型
学会如何设计 “角色-权限-菜单” 三级权限体系,实现不同用户看到不同的功能模块。
建议知识点:
- Spring Security + Thymeleaf 权限标签
- 多角色管理
- 自定义权限判断逻辑
🔹 进阶方向3:JWT + RESTful API 安全
如果你想做前后端分离项目(例如搭配 Vue/React),你需要掌握 JWT(JSON Web Token)身份令牌认证方式。
建议知识点:
- JWT 原理及使用
- 自定义 Filter
- Token 刷新机制
✨结语:
通过本文,你应该已经掌握了 Spring Security 的初步使用,包括基本的安全配置、用户认证流程和简单项目的搭建。
记住一句话:任何技术都不是一蹴而就的,只要你坚持动手练习,慢慢积累经验,很快就能独立搭建出自己的安全系统啦!
如果你觉得这篇文章对你有帮助,记得点赞+收藏哦!
📌 下期预告:《Spring Security进阶:连接数据库实现用户登录》敬请期待!

评论 0