You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Boot 3.2后Spring Authorization Server无法正常工作求助

解决Spring Boot 3.2.0下Spring Authorization Server授权码流程认证报错问题

问题描述

升级至Spring Boot 3.2.0后,使用Spring Authorization Server的授权码流程进行认证时,出现错误:No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken,且采用的是官方「快速开始」文档中的最简配置。

问题原因

Spring Boot 3.2.0对Spring Security的自动配置逻辑进行了调整:默认不再自动配置基于内存的用户认证(InMemoryUserDetailsManager)。而官方快速开始文档暂未同步更新该变化,导致认证流程中找不到处理UsernamePasswordAuthenticationToken的AuthenticationProvider。

解决方案

手动配置用户认证信息,以下是两种常用实现方式:

方式一:独立配置UserDetailsService Bean

创建配置类,手动定义内存用户和密码编码器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class UserAuthConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        // 自定义用户名、密码和角色
        UserDetails user = User.withUsername("user")
                .password(passwordEncoder().encode("password"))
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }

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

方式二:在SecurityFilterChain中整合用户配置

如果项目已有自定义的SecurityFilterChain,可直接在其中配置内存用户:

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.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
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
                .anyRequest().authenticated()
            )
            .formLogin(form -> form.permitAll());
        return http.build();
    }

    @Bean
    public InMemoryUserDetailsManager userDetailsManager() {
        UserDetails user = User.withUsername("user")
                .password(passwordEncoder().encode("password"))
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }

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

注意事项

确保项目已引入spring-boot-starter-security依赖,Spring Authorization Server依赖该组件提供认证基础能力。

内容的提问来源于stack exchange,提问作者Gerardo Roza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:12:39