org.springframework.beans.factory.UnsatisfiedDependencyException:创建bean时出错通过构造函数参数0表示不满足的依赖关系

问题描述 投票:0回答:1

我是 Spring boot 的新手,遇到了以下错误,我不知道如何解决它。我将感谢您帮助解决以下错误:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig' Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'webSecurityConfig': Requested bean is currently in creation: Is there an unresolvable circular reference?

违规代码如下:

package elements.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig {

    private final PasswordEncoder passwordEncoder;

    @Autowired
    public WebSecurityConfig(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login");
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user1ka").password(passwordEncoder.encode("y445uri125")).roles("USER")
            .and()
                .withUser("user2ka").password(passwordEncoder.encode("sa678sha769")).roles("USER");
    }
}

我使用的是spring Boot V3.3.4 非常感谢您的帮助。

spring javabeans boot
1个回答
0
投票

您在需要创建

PasswordEncoder
bean 的同一个类中定义了它。只需将
PasswordEncoder
bean 定义移动到另一个
Configuration
类即可:

@Configuration
public class FooConfig {
    @Bean
    public PasswordEncoder passwordEncoder() {
        return NoOpPasswordEncoder.getInstance();
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.