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

在开发一个 Web 应用程序时,安全性是一个非常重要的部分。你有没有想过,为什么很多网站要我们登录之后才能访问某些内容?这是因为这些内容是“受保护的”,只有合法用户才能访问。而实现这种保护功能的技术,正是我们要学习的——Spring Security。
简单来说,Spring Security 是一个用于为 Java 应用程序提供身份验证(Authentication)和授权(Authorization)功能的安全框架。它可以帮助你轻松实现:
- 用户登录功能
- 权限控制(比如管理员能看什么、普通用户能看什么)
- 防止攻击(如 CSRF、Session Fixation 等)
- 与其他认证方式集成(如 OAuth2、LDAP、JWT 等)
今天我们就要从零开始,手把手教你如何使用 Spring Security 搭建一个最基本的安全认证系统!
环境准备:搭建你的开发环境

想要开始使用 Spring Security,我们需要准备好以下几个工具:
✅ 必备工具清单:
- Java 17 或以上版本
- IDE(推荐 IntelliJ IDEA 或 Eclipse)
- Maven 构建工具
- Spring Boot 初始项目模板
🛠 步骤一:安装 Java
如果你还没安装 Java,可以从官网下载 JDK: 👉 https://www.oracle.com/java/technologies/downloads/
✅ 小贴士:推荐使用 Adoptium 提供的 OpenJDK,免费好用!
下载地址:https://adoptium.net/zh-CN/temurin/releases/
安装完成后,在命令行输入:
java -version
你会看到类似这样的输出:
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment Temurin-17.0.5+8 (build 17.0.5+8)
OpenJDK 64-Bit Server VM Temurin-17.0.5+8 (build 17.0.5+8, mixed mode)
说明 Java 安装成功!
🛠 步骤二:安装 IDE
推荐使用 IntelliJ IDEA Community 版本,完全免费,功能强大。
安装后打开,稍等片刻即可使用。
🛠 步骤三:创建 Spring Boot 项目
最简单的办法是使用 Spring Initializr 自动生成项目结构:
访问官方站点:https://start.spring.io/
然后按下面设置:
| 项目属性 | 值 |
|---|---|
| Project | Maven |
| Language | Java |
| Spring Boot Version | 推荐 3.x 以上版本 |
| Group | com.example |
| Artifact | demo |
| Name | demo |
| Packaging | Jar |
| Java Version | 17 |
勾选以下依赖项:
Spring Web(构建 Web 应用的基础)Spring Security
然后点击【Generate】按钮下载生成好的项目压缩包。
解压压缩包,并用 IntelliJ IDEA 打开这个项目文件夹。
恭喜你!你现在拥有了一个可以运行的 Spring Boot + Spring Security 的项目!
核心概念:通俗理解 Spring Security 的几个关键词

为了更好地理解和使用 Spring Security,我们需要先了解几个核心概念。
🔐 身份验证(Authentication)
什么是身份验证?就像你在公司刷门禁卡进门,刷卡的过程就是你在证明自己是谁。
在 Web 应用中,“身份验证”指的是:确认当前访问系统的人(或设备)是它所声称的那个人。
举个例子:
- 当你在网页输入用户名和密码提交登录,系统就会验证你是否是该用户的真正拥有者。
- 如果验证通过,就表示这个人“登录成功”。
🔒 授权(Authorization)
授权指的是:允许某个已认证的用户执行某些操作或者访问某些资源。
比如:
- 管理员能看到所有用户的信息;
- 普通用户只能看到自己的信息。
即使你已经登录,也不能随便访问别人的数据,因为你不具备权限。
👤 用户详情服务(UserDetailsService)
这是 Spring Security 里的一个接口,它的作用是帮助系统获取用户信息(例如从数据库加载用户)。
我们可以自定义一个类来实现这个接口,告诉系统:“我知道怎么从数据库里找到用户数据。”
🔐 安全配置类(SecurityFilterChain)
你可以把它理解为一个“保安经理”,它负责制定规则,决定哪些人可以进办公室、哪些人需要登记、哪些人不允许进入。
我们会编写一个配置类,告诉 Spring Security:
- 哪些 URL 是所有人都能访问的?
- 哪些 URL 只有登录才能访问?
- 使用哪种登录方式(表单登录、OAuth 登录等)?
现在,我们已经对 Spring Security 的几个关键概念有了基本认识了,下面我们就来动手实战搭建一个简单的项目!
实战项目:一步一步搭建安全登录系统
我们现在来做一个完整的实践:从搭建一个最简登录页面开始,到完成基于内存的用户认证功能,让你体验一下 Spring Security 是怎么工作的。
🧱 第一步:创建 Controller 和前端页面
我们在项目的控制器中添加一个简单的 Hello 页面:
创建控制器类 HelloController.java
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "hello"; // 返回 hello.html 页面
}
}
🧱 第二步:创建前端页面 hello.html
在 src/main/resources/templates/ 目录下新建一个 HTML 文件:hello.html,内容如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Hello</title>
</head>
<body>
<h1>Hello World!</h1>
<p>这是一个受保护的页面,请先登录。</p>
</body>
</html>
🚧 第三步:启动项目并测试未认证访问
现在运行主程序 DemoApplication.java,访问 http://localhost:8080/hello
你会发现浏览器跳转到了默认登录页:
Username: user
Password: 控制台显示的随机密码
没错,Spring Boot 默认为我们自动开启了一个临时登录系统,其中有一个默认用户 user。
但我们希望改成我们自己的用户管理系统,对吧?
⚙️ 第四步:手动配置安全策略
接下来我们要编写一个安全配置类,替换默认的安全策略。
创建一个新的配置类:
package com.example.demo.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 users() {
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("123456")
.roles("ADMIN")
.build();
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(admin, user);
}
// 配置访问规则和登录页面
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").authenticated() // /hello 页面必须登录才能访问
.anyRequest().permitAll() // 其他请求全部放行
)
.formLogin(login -> login
.loginPage("/login") // 自定义登录页面路径
.defaultSuccessUrl("/hello", true)
.permitAll()
)
.logout(logout -> logout.permitAll());
return http.build();
}
}
🧱 第五步:添加自定义登录页面 login.html
在 templates 文件夹下新增一个 login.html 页面:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>登录页面</title>
</head>
<body>
<h2>欢迎登录</h2>
<form method="post" action="/login">
<div>
<label for="username">用户名:</label>
<input type="text" id="username" name="username"/>
</div>
<div>
<label for="password">密码:</label>
<input type="password" id="password" name="password"/>
</div>
<button type="submit">登录</button>
</form>
</body>
</html>
🧱 第六步:添加登录控制器
我们还需要加一个 /login 路由,把 login.html 显示出来:
@GetMapping("/login")
public String showLoginForm() {
return "login";
}
将上面的代码放在 HelloController.java 中,完整示例如下:
@GetMapping("/login")
public String showLoginForm() {
return "login";
}
@GetMapping("/hello")
public String sayHello() {
return "hello";
}
🚀 第七步:运行并测试完整流程
重新启动项目:
- 访问 http://localhost:8080/hello
- 页面会跳转到
/login - 输入用户名
admin,密码123456 - 成功跳转到
hello.html页面!
✨恭喜你!你已经完成了第一个 Spring Security 登录系统!
常见问题:新手可能会遇到的问题及解决方法
❓ Q1:Spring Security 默认登录页面为什么不见了?
答:因为你重写了安全配置类,并设置了 .loginPage("/login"),此时默认页面失效,你需要自己提供一个登录页面(我们刚刚做了)。
❓ Q2:为什么会提示 "There is no PasswordEncoder mapped for the id ‘null’"?
答:这个问题是因为没有为密码指定加密方式导致的错误。
解决方案:
- 使用
User.withDefaultPasswordEncoder()方法(适用于简单练习) - 在生产环境中使用更安全的加密方式,比如 BCryptPasswordEncoder(后面我们会讲)
❓ Q3:我想让某些页面不需要登录就能访问怎么办?
答:修改配置类中 .authorizeHttpRequests() 方法,比如:
.requestMatchers("/login", "/css/**", "/js/**").permitAll()
这样可以让 /login 页面、CSS、JS 文件不需要登录就能访问。
❓ Q4:如何退出登录?
答:访问默认的 /logout 路径即可。Spring Security 默认支持注销功能,只要你是 POST 请求即可。
学习建议:下一步可以学什么?
恭喜你已经掌握了 Spring Security 的基础应用!接下来你可以沿着以下方向继续深入学习:

🔍 逐步提升路线图:
- 【下一阶段】学习 BCrypt 密码加密机制,替代默认明文密码
- 【重要技能】实现与数据库集成,用
JDBCUserDetailsManager从 MySQL 获取用户信息 - 【常用功能】集成 Thymeleaf 前端,动态展示用户权限内容
- 【高级特性】学习 JWT 认证,搭建无状态 RESTful API 接口安全体系
- 【扩展能力】接入第三方登录,比如微信、GitHub、Google OAuth2 等
总结

今天我们从零开始搭建了一个使用 Spring Security 的登录认证系统。虽然这只是一个入门级别项目,但它涵盖了认证流程的核心要素:用户管理、权限控制、登录页面定制和常见安全配置。
通过这篇文章,你应该已经明白:
✅ 什么是 Spring Security
✅ 如何搭建开发环境
✅ 最核心的身份认证原理
✅ 怎么用 Spring Security 实现简单登录系统
✅ 新手容易踩坑的地方和解决方法
✅ 后续应该继续学习的内容
💡 温馨提醒:多写代码、多尝试,是最好的学习方式!
如果你觉得这篇教程对你有帮助,欢迎收藏、转发,也欢迎继续关注我的系列教程《Spring Security 进阶实战》😊
如有疑问,可以在评论区留言提问,我会尽快回答你!
祝你学习愉快,早日成为 Spring Security 大牛!💪

评论 0