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

大家好!如果你是第一次听说“Spring Security”,没关系,我们从零开始。简单来说:
Spring Security 是一个为 Java 应用提供安全保护的框架。
你可以把它理解为一个“门卫”,它能帮你做以下几件事:
- 登录验证:确认用户身份(谁可以进系统)
- 权限控制:确定不同用户能看到的内容或操作的功能(进来之后能干什么)
- 防止攻击:比如阻止别人绕过登录、暴力破解密码等安全问题
在本教程中,我们会一步步带你构建一个带有基本登录功能的安全系统,适合完全零基础的新手。
环境准备:搭建开发环境(超详细步骤)

要使用 Spring Security,你需要先准备好开发环境,不用担心,只要跟着步骤来就能搞定。
1. 安装 Java JDK(推荐版本 17 或更高)
前往官网下载安装包:
👉 https://www.oracle.com/java/technologies/downloads/
安装完成后,在命令行输入:
java -version
如果看到类似下面的输出,说明安装成功:
openjdk version "17.0.8" 2023-07-18
2. 安装 IntelliJ IDEA 或 VSCode
推荐使用 IntelliJ IDEA 社区版(免费)
下载地址:👉 https://www.jetbrains.com/idea/download/
或者你也可以用 VSCode + 扩展的方式开发 Java 项目。
3. 创建 Spring Boot 项目
访问 Spring Initializr:👉 https://start.spring.io/
选择如下配置:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版本(如 3.x)
- Dependencies:
- Spring Web
- Spring Security
点击【Generate】按钮,下载项目压缩包,解压后导入 IntelliJ IDEA 或你常用的 IDE 中。
核心概念:通俗易懂地解释关键概念

Spring Security 涉及一些专业术语,我们不用死记硬背,咱们用生活中的例子来类比,一说就懂。
| 术语 | 类比 | 含义 |
|---|---|---|
| 认证 Authentication | 验证身份证件 | 确认你是谁 |
| 授权 Authorization | 办公室准入制度 | 确认你能做什么 |
| 用户 User | 客户 | 登录系统的个体 |
| 角色 Role | 员工职位(普通员工、管理员) | 不同角色有不同的权限 |
| 安全过滤器链 Filter Chain | 入口安检流程 | 多层检查机制,保障系统安全 |
初学者常见问题解答 ⚠️
❓什么是默认的登录页面?
当你引入了 Spring Security,默认就会给你一个登录页,路径是 /login,用户名是 user,密码会打印在控制台日志中。
❓为什么启动项目后访问 /hello 提示 403?
因为默认开启了认证,没登录不能访问任何资源。
实战项目:一步步实现一个简单的安全系统

目标:创建一个网页接口,必须登录才能访问。
第一步:编写 Controller 层代码
在你的 src/main/java 包下新建一个类:HelloController.java
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "你好!只有登录的人才能看到这句话。";
}
}
第二步:配置安全策略
Spring Security 的配置是在一个继承自 SecurityFilterChain 的 Bean 中进行的。我们创建一个新的配置类。
在 com.example.demo.config 包下创建 SecurityConfig.java
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 userDetailsManager() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("admin")
.password("123456")
.roles("USER") // 角色
.build();
return new InMemoryUserDetailsManager(user);
}
// 安全策略配置
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(configurer ->
configurer.anyRequest().authenticated()) // 所有请求都需认证
.formLogin(login -> login.permitAll()) // 启用表单登录,并允许访问 /login 页面
.logout(logout -> logout.permitAll()); // 启用登出
return http.build();
}
}
🧪 测试说明:
- 启动项目后访问
/hello,会被重定向到/login- 输入用户名
admin和密码123456即可进入页面
常见问题:新手容易踩的坑和解决方法
❓Q1:忘记密码怎么办?
A:如果是用
InMemoryUserDetailsManager方式,可以在配置中重新设置用户信息。
❓Q2:登录后还是跳转回登录页?
A:可能原因:
- 密码输入错误
- 表单未正确提交(CSRF 保护导致),建议开启调试模式或暂时关闭 CSRF(生产不推荐)
在 SecurityConfig.java 中添加 .csrf(csrf -> csrf.disable()) 可以临时解决问题(仅限测试时使用)
http.csrf(csrf -> csrf.disable());
⚠️ 注意:生产环境下一定要启用 CSRF 保护!
❓Q3:如何让某些页面不需要登录就能访问?
A:修改
.authorizeHttpRequests()配置即可
例如允许所有人访问 /index 页面:
http.authorizeHttpRequests(configurer ->
configurer.requestMatchers("/index").permitAll()
.anyRequest().authenticated())
学习建议:下一步学习路线图
恭喜你完成了第一个 Spring Security 小项目!接下来可以继续深入学习这些内容:
| 学习阶段 | 学习内容 | 推荐资源 |
|---|---|---|
| 入门巩固 | 过滤器链、自定义登录界面、记住我功能 | Spring Security 官方文档 |
| 进阶提升 | 数据库集成、RBAC 权限模型、JWT 认证 | B站课程《Spring Security实战》 |
| 高级应用 | OAuth2、SSO 单点登录、前后端分离处理 | GitHub 示例 + 微服务相关书籍 |
💡 温馨提示:
不要一开始就啃理论,一定要边学边动手写代码。遇到问题多查官方文档或 StackOverflow,逐步积累经验。
总结与鼓励
今天我们一起学习了:
- 什么是 Spring Security
- 如何搭建开发环境
- 几个关键的安全概念
- 实现了一个带登录功能的网站
- 解决了一些常见问题
- 并规划了未来的成长方向
作为一个刚入门的开发者,你已经走出了非常重要的第一步!坚持下去,不断实践,你也能成为独当一面的后端开发者!
如果你喜欢这篇教程,请收藏、转发给更多需要的朋友~一起进步!💪😊

评论 0