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

你可能听说过“Spring框架”,它是一个广泛使用的Java开发框架,可以帮助我们更轻松地构建企业级应用程序。而Spring Security,就是这个大家族中专门负责“安全性”的成员。
简单来说,Spring Security 就是用来保护你的 Web 应用程序的“保安”工具箱。你可以通过它来实现以下功能:
- 只有注册并登录的用户才能访问某些页面
- 不同角色(比如管理员和普通用户)有不同的权限
- 防止一些常见的网络攻击,比如跨站请求伪造(CSRF)
如果你正在开发一个带有登录注册功能的网站或后台系统,Spring Security 就是你不可或缺的好帮手。本教程将从零开始,一步步带你搭建一个简单的安全认证系统,适合完全没有经验的新手朋友。
环境准备:搭建我们的开发环境

在开始写代码之前,我们需要先准备好开发环境。别担心,这一步其实很简单。
1. 安装 Java 开发环境
确保你的电脑上已经安装了 JDK(Java Development Kit)。目前推荐使用 JDK 17 或以上版本。
你可以通过命令行输入下面这条命令来查看是否已安装以及版本号:
java -version
如果显示类似如下内容,说明已安装成功:
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment ...
如果没有安装,可以去Oracle官网或者使用 Adoptium 下载安装。
2. 安装开发工具 IntelliJ IDEA
推荐使用 IntelliJ IDEA Community Edition(免费版),这是一个非常强大且适合初学者的 Java IDE。
下载地址:https://www.jetbrains.com/idea/download/
安装完成后打开即可。
3. 创建第一个 Spring Boot 项目
我们现在要创建一个基于 Spring Boot 的项目,这是快速开发 Java Web 应用的标准方式。
方法一:使用 Spring Initializr 网站
按照以下步骤操作:
- Project:选择 Maven
- Language:Java
- Spring Boot Version:选最新稳定版本(例如 3.0.x)
- Group:
com.example - Artifact:
demo - Dependencies:添加
Spring Web,Spring Security
点击 “Generate” 下载压缩包,解压后用 IntelliJ 打开即可。
方法二:直接在 IDEA 中新建项目
在 IntelliJ 中点击 File → New → Project
选择 Spring Initializr → 填写 Group、Artifact、Dependences 同样添加上述依赖即可。
4. 运行项目测试一下
找到项目中的主类(通常叫 DemoApplication.java),运行它。
控制台看到如下字样表示启动成功:
Tomcat started on port(s): 8080 (http)
Started DemoApplication in ... seconds
此时打开浏览器访问:http://localhost:8080
你会发现有一个默认的错误页面(因为我们还没写任何页面)——没关系,我们继续下一步。
核心概念:了解 Spring Security 的几个关键术语


为了方便理解,这里用最通俗的语言解释几个核心概念。
✅ 用户(User)
指使用我们系统的访客。Spring Security 中,用户信息通常是用户名 + 密码 + 权限。
我们可以把用户想象成一个个“通行证持有者”,他们需要通过验证才能进入系统。
✅ 认证(Authentication)
认证就是判断用户是谁的过程,也就是常说的“登录”。
举个例子:你在网页上输入了用户名 admin 和密码 123456,系统会检查这两个值是否匹配。如果匹配,你就被“认证通过”。
✅ 授权(Authorization)
授权是在认证之后进行的操作,用于判断某个用户是否有权访问某项资源。
比如说:普通用户只能看不能改数据;管理员却可以新增、删除、编辑数据。这就是授权在起作用。
✅ 角色(Role)
角色其实就是对用户的分类,比如:
- ROLE_USER(普通用户)
- ROLE_ADMIN(管理员)
不同角色拥有的权限不同。可以通过设置角色来控制谁可以做哪些事。
✅ 登录页 & 注册页
这些是供用户输入账号密码的地方。Spring Security 提供了默认的登录页,也可以自定义。
实战项目:跟着我一起写一个登录系统
现在我们正式动手做一个完整的例子:实现一个包含登录功能的小型网站。我们将完成以下几个功能:
- 使用 Spring Security 提供的默认登录页
- 配置内存中的用户账号
- 设置不同的用户角色
- 实现最基本的权限控制
Step 1:配置用户账号
在 application.properties 文件中配置两个用户账户:
spring.security.user.name=admin
spring.security.user.password=admin123
spring.security.user.roles=ADMIN
spring.security.user2.name=user
spring.security.user2.password=user123
spring.security.user2.roles=USER
这样我们就设置了两个账号:
| 用户名 | 密码 | 角色 |
|---|---|---|
| admin | admin123 | ADMIN |
| user | user123 | USER |
注意:这种方式只适用于学习和演示,在实际项目中应该使用数据库保存用户信息。
Step 2:创建几个简单的控制器方法
打开 src/main/java/com/example/demo/DemoController.java
编写一个控制器来展示两个不同级别的访问接口:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
// 普通用户都能访问的公开页面
@GetMapping("/hello")
public String hello() {
return "你好,欢迎来到公共区域!";
}
// 只有管理员才可以访问的页面
@GetMapping("/admin")
public String adminOnly() {
return "恭喜!你是管理员 👑";
}
}
现在我们有两个 URL:
/hello—— 任何人都能访问/admin—— 只有角色为ADMIN的人才能访问
Step 3:配置 Spring Security
接下来我们要告诉 Spring Security 哪些页面需要保护、谁可以访问。
创建一个新的类文件:SecurityConfig.java
package com.example.demo;
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.UserDetailsService;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
// 这个配置决定了哪些 URL 需要被保护,以及允许谁访问
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/hello").permitAll()
.requestMatchers("/admin").hasRole("ADMIN") // 要求 ADMIN 角色
.anyRequest().authenticated()
)
.formLogin(withDefaults()); // 使用默认的登录界面
return http.build();
}
// 忽略用户详情服务的自动注入警告
@Bean
public UserDetailsService userDetailsService() {
return null;
}
}
上面的代码含义通俗解释:
/hello是所有人都可以访问的公开页面。/admin页面必须是管理员角色(ADMIN)才能访问。- 其他所有未声明的页面都需要登录之后才能访问。
- 使用 Spring Security 自带的登录页。
Step 4:测试运行你的安全系统
启动项目:
./mvnw spring-boot:run
访问以下两个地址试试效果:
- http://localhost:8080/hello —— 应该可以直接看到提示文字
- http://localhost:8080/admin —— 会被重定向到
/login页面
试着输入我们在 application.properties 里配置好的账号:
- 用户名:
admin/user - 密码:
admin123/user123
登录后就能正常看到页面啦!
如果你用的是普通用户 user,访问 /admin 时就会收到拒绝访问的提示,这就说明权限控制已经生效了!
常见问题解答:新手容易遇到的问题与解决办法
❓1. 我输入正确的用户名和密码但总是登录失败怎么办?
✅ 有可能是因为没有开启 Spring Security 的登录功能。
确保你已经在 SecurityConfig.java 中启用了登录支持:
.formLogin(withDefaults())
并且 .anyRequest().authenticated() 表示必须登录才能访问。
❓2. 启动时报错找不到类或依赖?
✅ 检查 pom.xml 是否导入了正确的 Spring Security 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
❓3. 浏览器提示访问被禁止(Forbidden)、403 错误?
✅ 一般是由 CSRF 保护机制引起的(Spring Security 默认启用)。
可以在 SecurityConfig.java 中暂时关闭这项功能,便于调试:
.csrf(csrf -> csrf.disable()) // 关闭 CSRF
⚠️ 注意:生产环境中不应轻易关闭,应使用合理的方式处理。
❓4. 我想修改默认的登录页路径?
✅ 你可以自己设计登录页面,然后在配置中指定:
.formLogin(login -> login.loginPage("/my-login"))
同时,你需要自己提供一个名为 /my-login 的 GET 请求处理逻辑,并返回一个表单页面。
❓5. 如何注销登录?
✅ Spring Security 提供了一个 /logout 路径。只需发送一个 POST 请求即可退出当前用户。
你可以添加一个注销链接:
<form action="/logout" method="POST">
<button type="submit">退出登录</button>
</form>
记得加上 CSRF Token 支持哦!
学习建议:下一步的学习方向
学完本教程后,你应该已经掌握了 Spring Security 的基本用法。接下来建议你进一步学习以下主题:
🔹 更深入的身份验证方式
- 数据库存储用户(如 MySQL + JDBC)
- 社交登录(如 GitHub、微信等 OAuth2 支持)
- JWT(前后端分离常用方案)
🔹 授权控制进阶
- 动态权限管理(如菜单权限、按钮权限)
- 基于表达式的访问控制(SpEL)
- 方法级别权限控制(@PreAuthorize, @Secured)
🔹 实战项目推荐
尝试独立开发一个小项目,例如:
- 博客后台管理系统(管理员增删文章)
- 商城系统(普通用户查看商品,管理员维护库存)
- 学生信息管理系统(老师与学生不同权限)
总结:Spring Security 入门就这么简单!
本教程介绍了如何使用 Spring Security 实现一个基础的用户登录与权限控制系统,包括以下几个关键点:
- 准备好 Java 开发环境和 Spring Boot 工程
- 了解 Spring Security 的几个核心概念(用户、认证、授权、角色)
- 编写了登录系统的核心代码并测试运行
- 解决了一些常见的问题
- 给出了后续学习的方向
记住一句话:Spring Security 并不难,只要肯动手练!
随着你不断实践更多案例,你会越来越熟练地掌握这套强大的安全框架。希望这篇教程为你打开了通往安全编程世界的大门!
如果你觉得这篇教程对你有帮助,也欢迎分享给其他刚开始学习 Java Web 的小伙伴!一起加油吧 🚀

评论 0