Java 无法自动连线。未找到UserDetailService类型的bean

Java 无法自动连线。未找到UserDetailService类型的bean,java,spring-boot,dependency-injection,autowired,Java,Spring Boot,Dependency Injection,Autowired,以下是我运行时的错误详细信息。 应用程序无法启动 说明: com.word.security.WebSecurityConfig中的字段userdetails服务 需要类型为的bean 'org.springframework.security.core.userdetails.UserDetailsService' 那是找不到的 行动: 考虑定义类型为的bean 中的“org.springframework.security.core.userdetails.UserDetailsServi

以下是我运行时的错误详细信息。

应用程序无法启动


说明:

com.word.security.WebSecurityConfig中的字段userdetails服务 需要类型为的bean 'org.springframework.security.core.userdetails.UserDetailsService' 那是找不到的

行动:

考虑定义类型为的bean 中的“org.springframework.security.core.userdetails.UserDetailsService” 您的配置

这里是
WebSecurityConfig.java

@Configuration
@EnableWebSecurity
@Service
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // disable caching
        http.headers().cacheControl();

        http.csrf().disable() // disable csrf for our requests.
                .authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers(HttpMethod.GET, "/login").permitAll()
                .antMatchers(HttpMethod.POST, "/createuser").permitAll()
                .antMatchers(HttpMethod.GET, "/user/1").permitAll()
                .anyRequest().authenticated()
                .and()
                // We filter the api/login requests
                .addFilterBefore(new JWTLoginFilter("/login", authenticationManager()), UsernamePasswordAuthenticationFilter.class)
                // And filter other requests to check the presence of JWT in header
                .addFilterBefore(new JWTAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // Create a default account
        auth.userDetailsService(userDetailsService());
    }
     @Bean
        public UserDetailsService userDetailsService() {
            return super.userDetailsService();
        }

}
@RestController
public class UserController {
@Autowired
private IUserService userService;

@Autowired
private SecurityService securityService;

   @RequestMapping(value = "/createuser", method = RequestMethod.POST)
    public String createUser(@RequestBody User user, Model md) {
        if (userService.checkExistUserName(user.getUserName())) {
            md.addAttribute("LoginError", true);
            return "bu kullanici adi ile bir kullanici bulunmaktadir. Lutfen baska bir kullanici adi ile deneyiniz";
        }
        User newUser = new User();
        newUser.setUserName(user.getUserName());
        newUser.setFirstname(user.getFirstname());
        newUser.setUserMail(user.getUserMail());
        newUser.setSurname(user.getSurname());
        newUser.setUserPassword(user.getUserPassword());
        userService.saveUser(user);

        /* Automatic login after register */
        securityService.autologin(user.getUserName(), user.getUserPassword());

        return user.getId().toString();
    }
Intellj IDEA显示以下
用户详细信息服务的
无法自动连线
错误

@Autowired
private UserDetailsService userDetailsService;
但是,在我的另一个名为
SecurityService
的类上

@Service
public class SecurityService {
    @Autowired
    IUserService userService;

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private UserDetailsService userDetailsService;

    public User activeUser() {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String username = auth.getName();
        Optional<User> user = userService.getUserByName(username);

        if (user.isPresent()) {
            return user.get();
        }
        return null;
    }
    public void autologin(String username, String password) {
        UserDetails userDetails = userDetailsService.loadUserByUsername(username);
        UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = new UsernamePasswordAuthenticationToken(userDetails, password, AuthorityUtils.createAuthorityList("USER"));

        authenticationManager.authenticate(usernamePasswordAuthenticationToken);

        if (usernamePasswordAuthenticationToken.isAuthenticated()) {
            SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
        }
    }
}
我没有得到与
WebSecurityConfig.java
上相同的错误

但是现在我在尝试创建一个用户之后,得到了如下所示的StackoverFlow错误

java.lang.StackOverflower错误:在 org.springframework.security.config.annotation.web.configuration.websecurityConfigureAdapter$UserDetailsServiceDelegator.loadUserByUsername(websecurityConfigureAdapter.java:441) ~[spring-security-config-4.2.1.RELEASE.jar:4.2.1.RELEASE] org.springframework.security.config.annotation.web.configuration.websecurityConfigureAdapter$UserDetailsServiceDelegator.loadUserByUsername(websecurityConfigureAdapter.java:442) ~ 这就像进入递归循环。不知道如何更新

包含此方法:

public UserDetailsService userDetailsServiceBean() throws Exception
来自Java文档:

重写此方法以将从configure(AuthenticationManagerBuilder)创建的UserDetails服务作为bean公开

因此,请尝试在
WebSecurityConfig
中重写此方法,如下所示:

@Bean
public UserDetailsService userDetailsService() {
    return super.userDetailsService();
}
包含此方法:

public UserDetailsService userDetailsServiceBean() throws Exception
来自Java文档:

重写此方法以将从configure(AuthenticationManagerBuilder)创建的UserDetails服务作为bean公开

因此,请尝试在
WebSecurityConfig
中重写此方法,如下所示:

@Bean
public UserDetailsService userDetailsService() {
    return super.userDetailsService();
}

此错误的原因之一是您没有此类的实现。创建一个名为CustomUserDetailsService的类,实现UserDetailsService并用@Component对其进行注释。
有关更多信息,请参阅spring文档。

此错误的原因之一是您没有此类的实现。创建一个名为CustomUserDetailsService的类,实现UserDetailsService并用@Component对其进行注释。
有关更多信息,请参阅spring文档。

查看此问题:查看此问题:谢谢,我不再有相同的错误。但是现在我得到了stackoverflow错误。你知道它为什么会发生吗?谢谢,我不再犯同样的错误了。但是现在我得到了stackoverflow错误。你知道它为什么会发生吗?