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

你有没有遇到过这样的场景:
- 你开发了一个博客网站,用户可以发布文章;
- 你希望只有注册并登录的用户才能发表内容;
- 不想让别人随意访问你的后台管理系统。
这个时候,你就需要一个“身份验证和权限控制”的功能。而 Spring Security 就是帮你实现这个功能的强大工具!
📌 Spring Security 是什么?
它是一个基于 Java 的安全管理框架,专门用于在 Spring 项目中进行:
- 身份认证(谁在用系统)
- 权限控制(能干什么)
简单来说,它的作用就像小区门口的保安。他会检查你是谁,并决定你能不能进哪个楼栋。
今天我们不讲太复杂的东西,而是从零开始,手把手教你如何用 Spring Security 搭建一个简单的安全认证系统!
二、环境准备:搭建开发环境

为了顺利学习 Spring Security,你需要先准备好以下几个开发环境:
1. 开发工具(IDE)
推荐使用:
- IntelliJ IDEA(社区版或Ultimate版)
- Eclipse(也可以)
下载地址:
- IntelliJ: https://www.jetbrains.com/idea/
- Eclipse: https://www.eclipse.org/downloads/
2. JDK 安装
确保已安装 Java Development Kit(JDK),建议版本为 JDK 17 或更高。
👉 查看是否安装成功:
java -version
如果输出版本号,说明已安装。
3. 创建 Spring Boot 项目
我们使用 Spring Initializr 快速生成一个 Spring Boot 项目:
- Project: Maven
- Language: Java
- Spring Boot Version: 建议使用最新稳定版(如 3.x)
- Group:
com.example - Artifact:
securitydemo - Dependencies:
- Spring Web
- Spring Security
- Thymeleaf (可选,用于前端展示)
然后点击 “Generate” 下载项目压缩包,解压后导入 IDE 中。
三、核心概念:通俗理解几个关键词

在开始写代码前,我们需要了解几个基本术语:
1. 认证(Authentication)
这是确认用户身份的过程,比如输入用户名和密码。
✅ 示例:
- 输入账号密码登录网站
- 手机验证码登录App
2. 授权(Authorization)
这是确定用户是否有权访问某个资源,比如查看文章、发布内容等。
✅ 示例:
- 普通用户只能查看文章
- 管理员可以删除评论
3. 用户(User)
即系统的使用者,通常存储在数据库中,包含用户名、密码、角色等信息。
4. 角色(Role)
角色决定了用户有哪些权限,比如:
- ROLE_USER:普通用户
- ROLE_ADMIN:管理员
5. 过滤器链(Filter Chain)
Spring Security 会用多个“安检门”来拦截请求,对请求进行认证授权检查。
四、实战项目:一步步搭建安全认证系统

我们将完成以下步骤:
- 实现一个简单的登录页面
- 配置 Spring Security 的安全策略
- 根据不同角色控制页面访问权限
第一步:创建首页控制器
我们在 src/main/java/com/example/securitydemo/controller 目录下新建一个类 HomeController.java:
package com.example.securitydemo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
第二步:创建 Thymeleaf 页面(模板)
在 src/main/resources/templates 下新建 home.html:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1 th:text="${msg}">欢迎光临!</h1>
<p><a href="/login">登录</a></p>
</body>
</html>
第三步:添加登录页(Spring Security 会自动提供)
我们现在先不用自己写登录页,因为 Spring Security 默认会帮我们生成一个 /login 页面。
第四步:配置 Spring Security
打开 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.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("123456")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
// 安全策略配置
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> {
auth
.requestMatchers("/").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN") // /admin/... 只有ADMIN能访问
.anyRequest().authenticated(); // 其他路径必须登录
})
.formLogin(form -> form.loginPage("/login")); // 使用默认登录页
return http.build();
}
}
上面代码的作用如下:
- 创建了两个用户:user 和 admin
- 对
/主页放行(所有人都可以访问) - 对
/admin/**路径设置了权限要求(必须拥有 ADMIN 角色) - 启用了表单登录功能(Spring Security 自动生成登录页面)
第五步:测试访问权限
启动项目后访问:
- 地址1:http://localhost:8080/ → 可以直接看到首页
- 地址2:http://localhost:8080/admin/test → 会被重定向到登录页
- 登录用户名:user,密码:123456 → 提示无权限
- 登录用户名:admin,密码:123456 → 成功访问
🎉 到此为止,一个最基础的安全系统就完成了!
五、常见问题解答(FAQ)
Q1:Spring Security 是不是只能做登录?
不是哦!Spring Security 功能非常强大,还能:
- 处理第三方登录(微信、QQ等)
- 实现权限细粒度管理(比如某用户只能编辑自己的文章)
- 防止 CSRF 攻击、SQL注入等安全漏洞
Q2:为什么登录成功后还会跳回登录页?
可能是两种情况:
- 密码错误 → 请检查用户名和密码是否正确
- 没有访问权限 → 虽然登录成功,但没有目标路径的权限,会被拒绝
Q3:我想自定义登录页面怎么做?
你可以通过 .loginPage("/my-login") 设置自定义登录页,并编写对应的控制器和 HTML 页面。
例如:
.formLogin(form -> form
.loginPage("/my-login")
.permitAll())
然后创建 /my-login 页面并配置控制器返回该视图即可。
六、学习建议:下一步怎么学?

你已经完成了 Spring Security 的入门,下面是一些提升建议:
🔸 学习方向1:进阶认证方式
- 数据库存储用户信息(结合 JPA + MySQL)
- 第三方登录(OAuth2 / SSO)
- JWT + Token 登录机制
🔸 学习方向2:权限控制进阶
- 方法级别的权限控制(@PreAuthorize)
- 自定义权限判断逻辑
- RBAC(基于角色的权限模型)
🔸 推荐学习资料
- 官方文档:https://docs.spring.io/spring-security/reference/index.html
- 书籍:《Spring Security in Action》
- B站搜索“Spring Security 教程”,有很多高质量免费课程
总结
在这篇文章中,我们一起完成了:
✅ 搭建 Spring Boot 环境
✅ 创建一个带有登录功能的 Spring Security 应用
✅ 配置不同用户的访问权限
✅ 解决常见疑问与误区
虽然只是入门,但已经具备了开发中小型应用所需的安全能力。接下来只要坚持实践,就能慢慢掌握更高级的应用技巧!
如果你觉得这篇文章对你有帮助,请记得点赞+关注,我们下次继续一起进步 😎

评论 0