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

OAuth 2 登录提示‘bad credentials’问题排查求助

问题分析与解决方案

你的配置中InMemoryUserDetailsManager的Bean方法名为user(),而Spring Security默认会自动查找**名为userDetailsService**的UserDetailsService类型Bean来加载用户认证数据。当前Bean命名不匹配,导致框架无法正确获取你配置的用户信息,因此无论输入何种用户名密码都会返回"无效凭据"。

解决方法一:修改Bean方法名(推荐)

将InMemoryUserDetailsManager的Bean方法名改为userDetailsService,让Spring Security自动识别:

package 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.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

import static org.springframework.security.config.Customizer.*;

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    
    @Bean
    public InMemoryUserDetailsManager userDetailsService() {
        return new InMemoryUserDetailsManager(
                User.withUsername("name")
                    .password("{noop}senha")
                    .authorities("read")
                    .build()
        );
    }
    
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
        return http
                .csrf(csrf -> csrf.disable())
                .authorizeHttpRequests(auth -> auth
                        .anyRequest().authenticated()
                )
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .httpBasic(withDefaults())
                .build();   
    }
}

解决方法二:显式指定UserDetailsService

如果不想修改Bean方法名,可以在SecurityFilterChain配置中手动注入并指定使用你的自定义Bean:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http, InMemoryUserDetailsManager user) throws Exception{
    return http
            .csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(auth -> auth
                    .anyRequest().authenticated()
            )
            .userDetailsService(user) // 显式绑定自定义的UserDetailsService
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .httpBasic(withDefaults())
            .build();   
}

验证

重启应用后,使用用户名name、密码senha通过HTTP Basic认证登录,即可正常通过验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:14