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

Spring Boot Security:User.builder()方法未定义问题求助

问题解决:User.builder()方法未定义

核心原因

你代码里导入的是自己项目的com.model.User类,而Spring Security提供的带builder()方法的User类是org.springframework.security.core.userdetails.User,这是导致方法找不到的直接原因。

解决步骤

1. 修正导入语句

把配置类里的:

import com.model.User;

替换为:

import org.springframework.security.core.userdetails.User;

如果项目中需要同时使用自定义的User类和Spring Security的User类,直接用全限定名调用Spring Security的User即可,比如:

UserDetails user = org.springframework.security.core.userdetails.User.builder()
    // ... 配置内容
    .build();

2. 修复密码未加密问题

当前代码里直接明文设置密码会触发Spring Security的密码格式校验错误,需要用你定义的PasswordEncoder加密后再设置:

@Bean
public UserDetailsService users(PasswordEncoder passwordEncoder) {
    UserDetails user = User.builder()
        .username("user")
        .password(passwordEncoder.encode("pass")) // 加密密码
        .roles("USER")
        .build();
    return new InMemoryUserDetailsManager(user);
}

3. 优化SecurityFilterChain的过时API

你代码里的authorizeRequests()已经废弃,建议替换为authorizeHttpRequests(),同时去掉不必要的SuppressWarnings注解:

@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
    http
        .csrf(csrf -> csrf.disable())
        .authorizeHttpRequests(auth -> auth
            .requestMatchers(HttpMethod.GET).permitAll()
            .anyRequest().authenticated()
        )
        .httpBasic(Customizer.withDefaults());
    return http.build();
}

修改后的完整配置代码

package com.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
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;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain configure(HttpSecurity http) throws Exception {
        http
            .csrf(csrf -> csrf.disable())
            .authorizeHttpRequests(auth -> auth
                .requestMatchers(HttpMethod.GET).permitAll()
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults());
        return http.build();
    }

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

    @Bean
    public UserDetailsService users(PasswordEncoder passwordEncoder) {
        UserDetails user = User.builder()
            .username("user")
            .password(passwordEncoder.encode("pass"))
            .roles("USER")
            .build();
        return new InMemoryUserDetailsManager(user);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:15:22