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

配置含自定义用户与密码编码器的Spring Security时遇错误

解决Spring Security配置中的方法未定义错误

原配置代码

@Configuration
public class SpringSecurityConfiguration {

    
    //InMemoryUserDetailsManager(UserDetails... users)
    
        
    @Bean
    public InMemoryUserDetailsManager createUserDetailsManager() {
        
        Function<String, String> passwordEncoder
                = input -> passwordEncoder().encode(input);
        
        UserDetails userDetails = User.builder()
                                    .passwordEncoder(passwordEncoder)
                                    .username("abc")
                                    .password("123")
                                    .roles("USER","ADMIN")
                                    .build();
        
        return InMemoryUserDetailsManager(userDetails);
    }

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

}

报错信息

Error:The method InMemoryUserDetailsManager(UserDetails) is undefined for the type SpringSecurityConfiguration
Error:The method BCryptPasswordEncoder() is undefined for the type SpringSecurityConfiguration

错误原因与修复步骤

这两个错误的核心是把类当成当前类的方法调用了,正确做法是用new关键字实例化对应类,同时要确保导入了正确的Spring Security依赖包:

  1. 修复InMemoryUserDetailsManager实例化
    原代码中直接写InMemoryUserDetailsManager(userDetails)是错误的,这是类的构造方法,需要用new创建实例,改为:

    return new InMemoryUserDetailsManager(userDetails);
    
  2. 修复BCryptPasswordEncoder实例化
    同理,BCryptPasswordEncoder()是类的构造方法,需要添加new关键字,改为:

    return new BCryptPasswordEncoder();
    
  3. 补充必要的导入语句
    在类的顶部添加以下导入,确保所有用到的类都能被识别:

    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.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.security.provisioning.InMemoryUserDetailsManager;
    import java.util.function.Function;
    

修复后的完整代码

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.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import java.util.function.Function;

@Configuration
public class SpringSecurityConfiguration {

    @Bean
    public InMemoryUserDetailsManager createUserDetailsManager() {
        
        Function<String, String> passwordEncoder
                = input -> passwordEncoder().encode(input);
        
        UserDetails userDetails = User.builder()
                                    .passwordEncoder(passwordEncoder)
                                    .username("abc")
                                    .password("123")
                                    .roles("USER","ADMIN")
                                    .build();
        
        return new InMemoryUserDetailsManager(userDetails);
    }

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

}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:32