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

如果你正在开发一个 Web 应用,比如后台管理系统、电商网站或用户注册登录功能,你一定会遇到这样一个问题:如何让不同的用户只能看到自己有权限看的内容?
这时候,你就需要使用 Spring Security。它是一个基于 Java 的强大安全管理框架,专门用来帮助开发者实现用户认证(登录)、权限控制(访问限制)和安全防护等功能。
在本教程中,我们会手把手带你从零开始,快速构建一个带有用户登录功能的 Spring Boot 项目。即使你是第一次接触 Spring Security,也能轻松上手!
环境准备:你需要哪些工具?

所需环境:
- Java JDK 17 或更高版本
- IDE:推荐使用 IntelliJ IDEA 或 VS Code
- Maven 构建工具(内置在大多数 IDE 中)
- 浏览器:Chrome、Edge、Firefox 均可
- Spring Boot 初始项目生成器:https://start.spring.io/
步骤说明:
第一步:创建 Spring Boot 项目
- 打开浏览器访问 https://start.spring.io/
- 配置如下内容:
- Project: Maven
- Language: Java
- Spring Boot Version: 推荐选择最新稳定版(如 3.x)
- Group: com.example
- Artifact: securitydemo
- Dependencies:
- Spring Web
- Spring Security
点击 Generate 下载 ZIP 文件并解压,然后导入到你的 IDE 中。
第二步:启动应用
在你的 IDE 中找到 SecuritydemoApplication.java 文件,运行这个类中的 main 方法。
打开浏览器访问 http://localhost:8080,你应该会看到 Spring Security 默认的登录页面 —— 这是因为我们已经引入了 Spring Security 依赖,默认启用了安全保护。
接下来,我们来深入了解它的原理,并手动配置我们的第一个安全规则。
核心概念:通俗易懂地理解关键概念


在正式编写代码之前,我们先了解几个关键概念,这些是你理解和使用 Spring Security 必须知道的基础词汇。
1. 认证(Authentication)
就是确认“你是谁”的过程。例如,输入用户名和密码登录就是一种认证方式。
2. 授权(Authorization)
即判断“你能做什么”。比如管理员可以查看所有用户信息,而普通用户只能看自己的信息。
3. 角色(Role)与权限(Authority)
- 角色:表示身份类型,比如“管理员”、“普通用户”
- 权限:表示具体能执行的操作,比如“读取文章”、“删除用户”
通常我们会根据角色来分配权限。
4. Filter(过滤器)
就像一道道安检门,用户访问接口时要经过这些“过滤器”,进行验证是否合法。
实战项目:一步步实现一个简单安全认证系统

现在我们开始实战练习,目标是搭建一个包含以下功能的项目:
- 访问首页不需要登录
- 访问
/user页面必须登录 - 访问
/admin页面必须是管理员角色才能访问
步骤一:添加基本网页接口
在 src/main/java/com/example/securitydemo/controller 路径下新建一个控制器文件:
package com.example.securitydemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "欢迎来到首页!无需登录即可访问";
}
@GetMapping("/user")
public String userPage() {
return "这是用户专用页面,你已通过认证";
}
@GetMapping("/admin")
public String adminPage() {
return "这是管理员页面,仅限管理员访问";
}
}
步骤二:配置安全策略
在 src/main/java/com/example/securitydemo/config 目录下新建配置类:
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 {
// 定义两个用户:user 和 admin
@Bean
public InMemoryUserDetailsManager userDetailsManager() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
UserDetails admin = User.withDefaultPasswordEncoder()
.username("admin")
.password("admin123")
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user, admin);
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(configurer -> configurer
.requestMatchers("/").permitAll()
.requestMatchers("/user").authenticated()
.requestMatchers("/admin").hasRole("ADMIN"))
.formLogin(form -> form.loginPage("/login").permitAll())
.logout(logout -> logout.permitAll());
return http.build();
}
}
这段代码做了几件重要的事:
- 创建两个测试用户:
user(角色 USER)、admin(角色 ADMIN) - 配置 URL 权限控制:
/:所有人都可以访问/user:必须登录/admin:必须是 ADMIN 角色才能访问
- 自定义登录页
/login并允许所有人访问
但注意:我们还没有自定义登录页面,Spring Security 会提供默认的登录表单。访问 /user 或 /admin,就会自动跳转到 /login 登录页面。
你可以直接使用前面定义的用户名和密码进行测试:
- 用户名:user / 密码:123456
- 用户名:admin / 密码:admin123
尝试分别以这两个账号登录,观察能否访问 /user 和 /admin。
常见问题解答
Q1:为什么我输入正确的账号密码还是登录失败?
A:检查是否正确设置了 .withDefaultPasswordEncoder(),如果忘记这个方法,密码格式不匹配会无法登录。
注意:这种方式只是演示用途,生产环境中应使用加密存储密码,如 BCrypt。
Q2:如何禁用 CSRF 防护?
A:有些前后端分离项目可能需要用到,在 SecurityConfig 中添加:
http.csrf(csrf -> csrf.disable());
不过建议保留此功能,除非明确知道自己在做什么。
Q3:如何退出登录?
A:访问 /logout 即可退出当前登录。该路径默认支持 GET 请求。
Q4:我想自定义登录页面怎么办?
A:我们可以添加一个 HTML 登录页面,并通过 controller 返回视图。这部分我们在进阶课程中详细讲解。
学习建议:下一步学什么?
恭喜你完成了第一个 Spring Security 小项目!你现在具备了:
- 搭建 Spring Security 基础结构的能力
- 管理用户和角色
- 控制接口访问权限
接下来推荐你继续学习以下几个方向:
| 推荐主题 | 内容简介 |
|---|---|
| Spring Security 注册功能实现 | 支持新用户注册和数据库保存 |
| 使用数据库做用户管理 | 用 MySQL 替换内存用户管理 |
| JWT 令牌认证 | 适用于前后端分离和 API 安全性 |
| OAuth2 第三方登录 | 如微信、Google 登录集成 |
| 方法级安全控制 | 使用 @PreAuthorize 在方法上做权限控制 |
总结
在这篇文章中,我们以实践驱动的方式讲解了 Spring Security 的基础使用。通过一个简单的项目,你学会了如何配置用户、设置权限,并对不同页面进行访问控制。
记住一句话:“安全不是事后补救,而是设计之初就要考虑的部分。”
希望这篇教程能成为你迈向安全开发的第一步。如果你喜欢这种风格,记得点赞、收藏、分享给其他刚入门的同学 😊
📌 资源链接推荐:
- Spring Security 文档:https://docs.spring.io/spring-security/site/docs/current/reference/html5/
- Spring Initializr:https://start.spring.io/

评论 0