重学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 WebSpring 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.htmllogin.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认证、基于角色的访问控制等高级特性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部