当前位置: 首页 > article >正文

Spring Boot 3 配置大全系列 —— 如何配置用户的登录与认证?

学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕!

在这里插入图片描述
在这里插入图片描述

升级 Spring Boot 3 配置讲解 —— 如何配置用户的登录与认证?

随着 Spring Boot 3 的发布,开发者迎来了许多新特性和改进,尤其是在安全性和用户认证方面。本文将深入探讨如何在 Spring Boot 3 中配置用户的登录与认证,并对比 Spring Boot 2 的变化,帮助开发者顺利升级并掌握新的配置方式。


一、Spring Boot 3 中用户认证的核心变化

在 Spring Boot 3 中,用户认证的配置方式发生了显著变化,主要体现在以下几个方面:

  1. WebSecurityConfigurerAdapter 被弃用
    Spring Boot 3 不再推荐使用 WebSecurityConfigurerAdapter,而是通过定义 SecurityFilterChain Bean 来配置安全性。这是 Spring Security 6 的重大变化之一。

  2. Jakarta 命名空间的引入
    由于 Jakarta EE 9 的包名从 javax 迁移到 jakarta,Spring Boot 3 中的相关类(如 HttpSecurity)也遵循了这一变化。

  3. 更灵活的配置方式
    Spring Boot 3 提供了更灵活的配置方式,支持通过 Lambda 表达式配置安全规则,代码更加简洁和易读。


二、Spring Boot 3 中配置用户登录与认证的步骤

以下是一个完整的示例,展示如何在 Spring Boot 3 中配置基于表单的用户登录与认证。

1. 添加依赖

首先,在 pom.xml 中添加 Spring Security 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
2. 配置 SecurityFilterChain

在 Spring Boot 3 中,通过定义 SecurityFilterChain Bean 来配置安全性。以下是一个典型的配置示例:

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.UserDetails;
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(authorize -> authorize
                .requestMatchers("/public/**").permitAll() // 允许公开访问的路径
                .anyRequest().authenticated() // 其他路径需要认证
            )
            .formLogin(form -> form
                .loginPage("/login") // 自定义登录页面
                .loginProcessingUrl("/process-login") // 登录表单提交的 URL
                .defaultSuccessUrl("/home") // 登录成功后的默认跳转页面
                .permitAll() // 允许所有用户访问登录页面
            )
            .logout(logout -> logout
                .logoutUrl("/logout") // 注销 URL
                .logoutSuccessUrl("/login?logout") // 注销成功后的跳转页面
                .permitAll()
            )
            .csrf(csrf -> csrf.disable()); // 禁用 CSRF 保护(根据需求选择是否禁用)

        return http.build();
    }

    @Bean
    public InMemoryUserDetailsManager userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();
        return new InMemoryUserDetailsManager(user);
    }
}
3. 配置用户详情服务

在上面的示例中,我们使用了 InMemoryUserDetailsManager 来存储用户信息。实际项目中,通常会从数据库或其他外部系统中加载用户信息。可以通过实现 UserDetailsService 接口来自定义用户详情服务。

import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 从数据库或其他数据源中加载用户信息
        // 示例:假设从数据库中查询用户
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new org.springframework.security.core.userdetails.User(
            user.getUsername(),
            user.getPassword(),
            user.getAuthorities()
        );
    }
}
4. 配置密码编码器

Spring Security 要求对密码进行编码存储。可以使用 PasswordEncoder 来配置密码编码器。

import org.springframework.context.annotation.Bean;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

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

三、Spring Boot 3 中的其他认证方案

除了基于表单的认证,Spring Boot 3 还支持多种认证方案,开发者可以根据需求选择适合的方式:

  1. OAuth2 认证
    适用于第三方登录(如 Google、GitHub)或微服务之间的授权。

  2. JWT 认证
    适用于无状态的 RESTful API,通过 JWT 令牌进行用户认证。

  3. LDAP 认证
    适用于企业级应用,通过 LDAP 服务器进行用户认证。

  4. Remember-Me 认证
    通过 Cookie 实现“记住我”功能,提升用户体验。


四、从 Spring Boot 2 升级到 Spring Boot 3 的注意事项
  1. 迁移 WebSecurityConfigurerAdapter
    如果项目中使用了 WebSecurityConfigurerAdapter,需要将其替换为 SecurityFilterChain 配置。

  2. 处理 Jakarta 命名空间变更
    javax 包名替换为 jakarta,确保代码兼容性。

  3. 检查依赖兼容性
    确保项目中使用的第三方库(如数据库驱动、工具类库)兼容 Spring Boot 3 和 JDK 17。


五、总结

Spring Boot 3 在用户登录与认证方面提供了更灵活、更安全的配置方式。通过 SecurityFilterChain,开发者可以轻松配置基于表单的登录、OAuth2、JWT 等多种认证方案。升级到 Spring Boot 3 不仅能够享受新特性带来的便利,还能为应用的安全性提供更强保障。

希望本文能帮助你更好地理解 Spring Boot 3 中的用户认证配置,并在实际项目中顺利应用。如果你有更多问题或需要进一步的帮助,欢迎在评论区留言讨论!


http://www.kler.cn/a/468990.html

相关文章:

  • Go Ebiten随机迷宫生成示例
  • 【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 3:算法实现
  • Vue 全局事件总线:Vue 2 vs Vue 3 实现
  • windows中硬件加速gpu计划开启cpu的使用率居高不下
  • 在Mac电脑上搭建Gradle
  • 气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间
  • (转)rabbitmq怎么保证消息不丢失?
  • CPU过剩是什么意思? 有什么对电脑的影响吗?如何确认CPU有没有过剩
  • 太速科技-688-基于 VM1302的双路100G光纤PCIe4.0X16加速计算卡
  • 【Linux】函数
  • Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架
  • 生成式AI新星:DeepSeek-V3 与 GPT-4o 的对比分析
  • R shiny app | 网页应用 空格分隔的文本文件在线转csv
  • Go语言的数据类型
  • 实时数仓: Hudi 表管理、Flink 性能调优或治理工具脚本
  • 微电网运维:保障能源“小宇宙”稳定运行
  • 代码随想录 day 22 回溯算法 part01
  • 自动化立体库安全使用管理制度完整版
  • 计算机网络 (25)IPV6
  • 关于C语言初步的一些基础知识整理(2)
  • 多模态论文笔记——U-ViT
  • AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义
  • vue el-select封装一个滚动加载更多下拉选项的自定义指令
  • 基于深度学习算法的AI图像视觉检测
  • 如何通过API实现淘宝商品评论数据抓取?item_review获取淘宝商品评论
  • 洛谷 P3000 [USACO10DEC] Cow Calisthenics G