Spring Boot 3.4.3 整合 Spring Security 6.4.2 安全认证框架实现简单身份认证

在 Web 应用开发中,安全认证是保护系统资源和用户数据的核心需求。Spring Boot 3.4.3 结合 Spring Security 6.4.2 提供了一个强大而灵活的安全框架,可以轻松实现用户身份认证功能。本文将详细介绍如何在 Spring Boot 3.4.3 中整合 Spring Security 6.4.2,实现简单的内存认证,并附上完整代码示例,助你在2025年的项目中快速构建安全认证机制。


1. Spring Security 简介
1.1 什么是 Spring Security?

Spring Security 是 Spring 生态中的安全框架,提供认证、授权和防护功能。它支持多种认证方式(如表单登录、OAuth2 等),并与 Spring Boot 无缝集成。Spring Security 6.4.2 引入了 Lambda 风格的配置方式,更加简洁和现代化。

1.2 为什么选择 Spring Security?
  • 灵活性:支持内存、数据库等多种认证源。
  • 安全性:内置防护机制(如 CSRF、XSS)。
  • 易用性:与 Spring Boot 集成后配置简单。
1.3 本文目标
  • 配置 Spring Security 基础环境。
  • 实现基于内存的简单身份认证。
  • 提供登录和受保护接口示例。

2. 项目实战

以下是基于 Spring Boot 3.4.3 整合 Spring Security 6.4.2 实现简单身份认证的完整步骤。

2.1 添加 Maven 依赖

pom.xml 中添加必要的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.3</version>
    </parent>
    <groupId>cn.itbeien</groupId>
    <artifactId>springboot-security-simple</artifactId>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!-- Spring Boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>
</project>

说明:

  • spring-boot-starter-security:提供 Spring Security 的核心功能。
2.2 配置 Spring Security

创建一个 Security 配置类,实现内存认证:

package cn.joyous.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.config.annotation.web.configuration.EnableWebSecurity;
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
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers("/public").permitAll() // 公开接口
                        .anyRequest().authenticated() // 其他需认证
                )
                .formLogin(form -> form // 默认表单登录
                        .defaultSuccessUrl("/home") // 登录成功跳转
                )
                .logout(logout -> logout
                        .logoutSuccessUrl("/public") // 退出后跳转
                );
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        var user = User.withUsername("admin")
                .password("{noop}123456") // {noop} 表示明文密码
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }
}

代码说明:

  • SecurityFilterChain:定义安全过滤规则。
  • InMemoryUserDetailsManager:内存存储用户信息。
  • {noop}:不加密密码,仅用于演示。
2.3 创建控制器

提供测试接口:

package cn.joyous.controller;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class HomeController {

    @GetMapping("/public")
    public String publicEndpoint() {
        return "这是一个公开接口,无需登录";
    }

    @GetMapping("/home")
    public String home(@AuthenticationPrincipal UserDetails userDetails) {
        return "欢迎回来, " + userDetails.getUsername() + "!";
    }
}
2.4 启动与测试
  1. 启动 Spring Boot 应用。
  2. 访问 http://localhost:8080/public,无需登录即可访问。
  3. 访问 http://localhost:8080/home,跳转到默认登录页。
  4. 输入用户名 admin 和密码 123456,登录后显示欢迎信息。
  5. 点击退出,跳转回 /public

3. 进阶功能(可选)
  1. 密码加密
    添加 BCrypt 加密:

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    

    更新用户密码:

    var user = User.withUsername("admin")
            .password(passwordEncoder().encode("123456"))
            .roles("USER")
            .build();
    
  2. 自定义登录页
    创建 login.html 并配置:

    .formLogin(form -> form
            .loginPage("/login")
            .permitAll()
    )
    
    <!DOCTYPE html>
    <html>
    <body>
        <h1>登录</h1>
        <form method="post" action="/login">
            <input type="text" name="username" placeholder="用户名"/>
            <input type="password" name="password" placeholder="密码"/>
            <button type="submit">登录</button>
        </form>
    </body>
    </html>
    
  3. 角色权限控制
    添加角色限制:

    .authorizeHttpRequests(auth -> auth
            .requestMatchers("/admin/**").hasRole("ADMIN")
            .requestMatchers("/user/**").hasRole("USER")
            .anyRequest().authenticated()
    )
    

4. 总结

Spring Boot 3.4.3 整合 Spring Security 6.4.2 提供了一种简单而强大的方式来实现身份认证。本文通过内存认证展示了基本配置和使用方法,适合快速搭建原型或学习安全框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专业WP网站开发-Joyous

创作不易,感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值