重学Spring Boot 3 - 集成Spring Security(一)
在现代 Web 应用开发中,安全性是一个不可或缺的方面。Spring Security 是一个健壮的安全框架,可以帮助我们轻松地为 Spring Boot 应用添加认证和授权功能。本文将介绍如何在 Spring Boot 3 中集成 Spring Security,以便为我们的应用提供基础的安全保护。
1. 项目搭建
首先,我们需要创建一个新的 Spring Boot 项目。你可以使用 Spring Initializr(https://start.spring.io/)来快速生成项目。在依赖项中,选择 Spring Web
和 Spring Security
这两个模块,以及你需要的其他模块。
生成完项目后,导入到你的 IDE 中。
2. 添加依赖
在 pom.xml
文件中,我们需要确保引入了 Spring Security 的依赖项。以下是一个简单的示例:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3. 配置 Spring Security
接下来,我们需要创建一个安全配置类,用于配置 Spring Security。创建一个名为 SecurityConfig
的类,并使用 @Configuration
和 @EnableWebSecurity
注解进行标记。
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.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 允许所有用户访问根路径
http.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.formLogin() // 使用表单登录
.loginPage("/login") // 自定义登录页面
.permitAll()
.and()
.logout()
.permitAll();
}
}
在这个配置中,我们允许所有用户访问根路径(/
),而其他所有请求都需要身份验证。我们还配置了表单登录,并在 /login
路径提供登录页面。
4. 创建控制器
接下来,创建一个控制器,处理根路径和登录请求。例如,创建一个名为 HomeController
的类:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home"; // 返回 home.html 视图
}
@GetMapping("/login")
public String login() {
return "login"; // 返回 login.html 视图
}
}
5. 创建视图
在 src/main/resources/templates
目录下,创建 home.html
和 login.html
文件,用于渲染视图。
home.html
示例:
<!DOCTYPE html>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>欢迎来到首页!</h1>
<a href="/logout">登出</a>
</body>
</html>
login.html
示例:
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<h1>登录页面</h1>
<form method="post" action="/login">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password"><br>
<button type="submit">登录</button>
</form>
</body>
</html>
6. 测试
项目搭建完毕后,运行 Spring Boot 应用,并在浏览器中访问 http://localhost:8080/
。你应该能够看到首页。在访问受保护的资源时,系统会重定向到登录页面。
总结
通过上面的步骤,我们成功地在 Spring Boot 3 项目中集成了 Spring Security。我们创建了基础的登录功能和访问控制。这是使用 Spring Security 构建更复杂应用的基础。后续我们可以进一步探索JWT认证、基于角色的访问控制等高级特性。