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

在现代的 Web 应用中,安全性是非常重要的一环。无论是登录功能、权限控制还是防止恶意访问,都需要通过某种机制来保障系统的安全。
而 Spring Security 就是一个专门用来处理这些安全问题的框架。它可以帮助我们:
- 让用户登录系统
- 控制不同用户的访问权限
- 加密用户密码
- 防止常见的攻击(如 CSRF)
简单来说,Spring Security 就是给你的 Spring 项目加一道“门卫”,只有满足条件的人才能进入特定区域。
这篇文章将从零开始,一步步带你快速搭建一个最简单的安全认证系统,适合完全没接触过 Spring Security 的初学者!
环境准备:搭建开发环境


要使用 Spring Security,我们需要先准备好一个开发环境。
所需工具
- JDK 8 或以上版本
- IDE:推荐 IntelliJ IDEA(社区版即可)
- Maven 或 Gradle 构建工具
- 浏览器
创建 Spring Boot 项目
我们使用 https://start.spring.io 快速创建一个 Spring Boot 项目:
选择以下选项:
- Project: Maven
- Language: Java
- Spring Boot Version: 推荐 2.x 以上
- Group: com.example
- Artifact: spring-security-demo
- Dependencies: 添加两个:
- Spring Web
- Spring Security
点击 “Generate” 下载项目压缩包。
解压后,用 IntelliJ IDEA 导入为 Maven 项目。
✅ 至此,你的开发环境就准备好了!
核心概念:你需要知道的几个关键词
虽然你还不懂 Spring Security,但只需要记住以下几个核心概念就可以轻松上手了。
1. 用户(User)
就是访问系统的普通人,通常需要提供用户名和密码才能登录。
2. 权限(Authority / Role)
用户拥有不同的“身份”,比如管理员、普通用户。不同身份可以访问不同的资源。
3. 登录(Authentication)
验证用户是否合法的过程,比如输入用户名和密码。
4. 授权(Authorization)
确定已登录的用户能访问哪些内容。
5. 安全配置(SecurityConfig)
是我们自己写的一个配置类,告诉 Spring Security 怎么保护网站。
📌 简单记忆口诀:认证是“你是谁”,授权是“你能做什么”。
实战项目:一步步实现一个简单的登录系统
现在我们来做一个最简单的安全认证系统,包括:
- 提供默认登录页面
- 设置一个测试账号
- 对 /admin 页面做权限限制
步骤一:添加测试账号
Spring Security 默认会帮我们生成一个临时用户,但我们也可以自己定义用户名和密码。
打开 application.properties 文件(如果没有,请在 resources 下新建),添加如下内容:
spring.security.user.name=admin
spring.security.user.password=123456
这样我们就有了一个用户名为 admin、密码为 123456 的测试用户。
💡新手提醒:密码不要写明文!后面我们会学到加密的方法。
步骤二:启动项目看看效果
运行你的 Spring Boot 项目,等服务启动完成后,在浏览器中访问任意路径(例如:http://localhost:8080/hello),你会被自动重定向到 /login 页面。
你会看到一个 Spring Security 提供的默认登录界面,输入刚才设置的账号密码试试看。
✅ 成功登录说明认证已经生效!
步骤三:自定义权限规则
现在我们要让 /admin 这个页面只能由管理员访问。
首先创建一个控制器类:
HomeController.java
package com.example.springsecuritydemo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "欢迎来到首页!";
}
@GetMapping("/admin")
public String admin() {
return "这是管理员页面!";
}
}
此时,所有登录用户都可以访问 /admin。我们希望只有角色为 ADMIN 的用户才有权限。
步骤四:编写安全配置类
创建一个新的类:
SecurityConfig.java
package com.example.springsecuritydemo;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
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;

@EnableWebSecurity
public class SecurityConfig {
@Bean
public InMemoryUserDetailsManager users() {
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 filterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/admin").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout();
return http.build();
}
}
✅ 解释一下这个配置的作用:
- 我们手动设置了两个用户:user 和 admin,分别对应 USER 和 ADMIN 角色。
- 配置了访问规则:
/谁都可以访问;/admin只有 ADMIN 角色才能访问;- 其他任何页面都要登录才可以访问;
- 启用了表单登录(也就是弹出登录页)和退出功能。
再次运行项目,尝试访问 /admin 页面,你会发现:
- 使用 username=user 登录 → 被拒绝;
- 使用 username=admin 登录 → 成功访问!
🎉 到这里为止,我们的第一个带权限的 Spring Security 项目就完成啦!
常见问题解答
Q1:为什么我修改了密码但无法登录?
A:确保你在 application.properties 中设置的账号与我们在 SecurityConfig 中定义的不冲突。如果你用了自定义用户管理类,那么 application.properties 里的设置会被忽略。
Q2:密码明文存储危险怎么办?
A:本教程为了方便演示用了明文密码。在实际开发中请使用 BCryptPasswordEncoder 加密密码,后续我们可以学习如何集成更安全的密码管理方式。
Q3:登录页面太丑能不能自定义?
A:当然可以!你可以使用 Thymeleaf 模板或直接返回 HTML,设计自己的登录页面。我们会在下一阶段讲到。
Q4:我想让用户不用登录就能访问某些接口,怎么配置?
A:使用 .antMatchers("/api/public").permitAll() 即可。
学习建议:下一步该学什么?
恭喜你完成了本教程的学习!接下来如果你想继续深入 Spring Security,可以考虑学习以下方向:
- 自定义登录页面
- 使用数据库管理用户信息(如 MySQL + JPA)
- JWT 认证机制
- RBAC 权限模型实战
- 与 OAuth2、SSO 结合使用
📚 推荐资料:
- Spring 官网文档:https://docs.spring.io/spring-security/
- GitHub 示例项目搜索关键词:spring security demo
- B站/YouTube 搜索:“Spring Security 入门实战”
结语
Spring Security 虽然听起来很高深,但只要理解了它的基本思想,并动手实践几次,就能掌握它的核心用法。希望这篇教程帮你迈出了第一步!
如果你喜欢这种风格的教学,请告诉我,我可以继续为你带来更多通俗易懂的后端技术入门教程 😊

评论 0