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

你是不是常常听说“登录”“权限控制”“用户角色”这些词,但不知道它们是怎么在后端实现的?别担心,今天我们要介绍一个非常重要的Java框架——Spring Security。
简单说,Spring Security是用来给你的Web应用“加锁”的工具。
想象一下,你开发了一个网站或App,有些页面只能登录的用户才能访问,比如个人主页、购物车;而有些功能只有管理员才有权限操作,比如修改商品信息。
这时候,你就需要一个系统来管理“谁可以访问什么”,这就是权限控制。而Spring Security就是帮你完成这项工作的神器。
它可以帮助你:
- 实现用户登录和注销
- 限制不同用户的访问权限
- 防止恶意攻击(比如CSRF、XSS等)
- 集成其他登录方式(如QQ、微信、Google)
如果你刚开始学后端开发,掌握Spring Security将是一个非常棒的起点!
环境准备:开发环境搭建步骤

学习Spring Security之前,你需要先准备好一个基本的开发环境。我们采用的是Java + Spring Boot技术栈,因为它足够简单且适合初学者。
所需工具清单:
- Java 17(JDK)
- Maven 或 Gradle(构建工具)
- IntelliJ IDEA 或 Eclipse(IDE)
- Spring Boot 3.x(推荐使用2.7+也可以)
- 一款浏览器(用于测试)
搭建步骤如下:
步骤1:安装JDK
前往 Oracle官网 或 OpenJDK官网 下载并安装JDK(推荐17版本)。
安装完成后,在命令行输入:
java -version
javac -version
确保显示版本号为17。
步骤2:安装IDE(推荐IntelliJ IDEA)
下载地址:https://www.jetbrains.com/idea/download/
安装完成后打开IDEA,选择“Create New Project”。
步骤3:创建Spring Boot项目
使用 Spring Initializr 创建项目:
- Project: Maven
- Language: Java
- Spring Boot Version: 3.0.x 或者 2.7.x
- Dependencies: Spring Web、Spring Security
点击“Generate”下载项目压缩包,解压后导入到IDE中。
步骤4:运行项目
找到 Application.java 文件,右键点击 “Run”。如果没有报错,并看到类似下面的信息:
Tomcat started on port(s): 8080 (http)
说明启动成功!你可以用浏览器访问 http://localhost:8080 查看是否正常(因为还没有任何接口,此时可能返回错误)。
核心概念:通俗解释关键知识点
开始写代码之前,我们需要了解几个核心概念。不用担心,我会尽量用最简单的语言来解释。
1. 用户认证(Authentication)
什么是认证?
就是确认你是谁的过程。就像你在银行柜台办理业务时要出示身份证一样。
在Spring Security中,这个过程通常是:用户提供用户名和密码 → 系统验证是否正确 → 如果正确就视为登录成功。
2. 用户授权(Authorization)
什么是授权?
确定你是否有权限访问某个资源。比如你登录了,但不是管理员,就不能访问后台管理系统。
Spring Security可以让你设置规则,比如:“只允许admin用户访问/delete”这个API。
3. 安全配置类(SecurityConfig)
我们在Spring Boot中编写一个配置类,告诉Spring Security怎么处理登录、哪些页面需要登录、以及登录之后跳转到哪里等等。
这个类通常继承 WebSecurityConfigurerAdapter(旧版本),或者直接使用 SecurityFilterChain bean(新版本)。
实战项目:一步步实现登录功能

现在我们来动手做一个简单的项目,实现以下功能:
- 访问首页时,如果没登录就跳转到登录页
- 登录成功后可以看到首页内容
- 使用默认登录表单(Spring Security自带)
第一步:添加控制器
新建一个控制器类 HomeController.java:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home"; // 这是一个HTML页面名
}
}
然后我们在 resources/templates 目录下创建一个叫 home.html 的文件:
<!DOCTYPE html>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>欢迎来到首页!您已登录。</h1>
</body>
</html>
第二步:添加安全配置类
创建一个新的Java类 SecurityConfig.java:
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.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/").authenticated() // 首页需要登录
.anyRequest().permitAll()
)
.formLogin(login -> login
.loginPage("/login") // 自定义登录页面路径
.defaultSuccessUrl("/", true)
.permitAll()
)
.logout(logout -> logout
.permitAll()
);
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
var user = User.withDefaultPasswordEncoder()
.username("user")
.password("123456")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
第三步:添加登录页面(可选)
虽然Spring Security默认提供了一个登录界面,但我们也可以自己创建一个更友好的页面:
在 resources/templates 下创建 login.html:
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<h2>请登录</h2>
<form method="post" action="/login">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<button type="submit">登录</button>
</form>
</body>
</html>
再修改控制器,添加登录页面路由:
@GetMapping("/login")
public String login() {
return "login";
}
第四步:运行程序,测试登录
启动项目,浏览器访问 http://localhost:8080,你会被重定向到 /login 页面。
输入用户名 user 和密码 123456,点击登录,即可看到首页!
常见问题解答
Q1:为什么输入正确的用户名密码也登录失败?
- 可能是你修改了密码但没重启服务。
- 检查是否开启了CSRF保护(Spring Security默认开启)。
- 确保没有拼写错误,用户名和密码是区分大小写的。
Q2:我想要多个用户怎么办?
当前我们使用的是内存存储用户信息,适用于演示。真实场景应该使用数据库。
后续你可以通过集成Spring Data JPA或MyBatis,从MySQL读取用户信息。
Q3:我想自定义登录成功后的跳转页面?
可以修改 .defaultSuccessUrl() 方法的内容。例如:
.defaultSuccessUrl("/dashboard", true)
表示登录成功后跳转到 /dashboard 页面。
学习建议:下一步该学什么?
恭喜你完成了Spring Security的基础学习!这是你进入Java后端安全领域的重要一步。
接下来建议你继续学习以下几个方向:
- 数据库整合:学会用MySQL保存用户信息和角色数据。
- REST API支持:了解如何为前后端分离项目提供JWT认证。
- 权限细粒度控制:学习方法级安全注解如
@PreAuthorize。 - OAuth2与社交登录:接入GitHub、微信等第三方账号登录。
- 安全漏洞防护:了解CSRF、XSS、SQL注入等常见攻击手段及防御方式。
总结
本文通过一步一步引导你搭建了一个简单的安全登录系统,涵盖了Spring Security的核心概念和实践技巧。希望你能从中感受到Spring Security的强大与易用性。
记住一句话:安全是开发中最重要的一环。掌握好Spring Security,是你迈向专业Java后端工程师的关键一步!
如果你喜欢这篇文章,欢迎点赞、收藏或转发分享给更多小伙伴 😊
字数统计:约2424字

评论 0