2017-11-25 245 views
2

我有问题,UserDetailsS​​erviceImpl()的Java + Vaadin + Spring Security的

org.springframework.beans.factory.BeanCreationException:错误 创建名为 'securityConfig' 豆:自动装配 依赖注入失败;构造函数UserDetailsS​​erviceImpl()是 不确定

@Bean 
public UserDetailsService userDetailsService(){ 
    return new UserDetailsServiceImpl(); 
} 

@Service 
@NoArgsConstructor(force = true) 
public class UserDetailsServiceImpl implements UserDetailsService { 

private final UserService userService; 

@Autowired 
public UserDetailsServiceImpl(UserService userService) { 
    this.userService = userService; 
} 

应用程序未能启动((

+0

这是一个maven ... – Serhii

+0

maven命令使用什么来运行项目? –

+0

你可以看到我的项目https://drive.google.com/file/d/17VQX490sQ4n5K8s94pCTFDAookQh0_hS/view?usp=sharing – Serhii

回答

0

我看到你的项目,并查看一些关于that.Here要同时实现用户与CustomUserUserDetailsService自定义的UserDetailsS​​ervice。

1)您的UserDetailsServiceImpl类实现UserDetailsService。将您的UserService注入Autowired注释。删除此构造函数或仅对其进行注释。

@Autowired 
private UserService userService; 

/*public UserDetailsServiceImpl(UserService userService) { 
    this.userService = userService; 
}*/ 

2)标注您的接口UserService@Service和它的实现类UserServiceImpl@Repository因为它们是春天的组成部分。

3)从AppConfig类删除此Bean。

@Bean 
public UserDetailsService userDetailsService(){ 
    return new UserDetailsServiceImpl(); 
} 

4)当你创建自定义UserDetailsService命名为UserDetailsServiceImpl,所以你需要引入你的定制实现AuthenticationManagerBuilder。为此,请使用@Autowired注释将您的自定义类注入SecurityConfig

@Autowired 
private UserDetailsServiceImpl userDetailsService; 

5)是的,你处于最后阶段。通过设置将此userDetailsS​​ervice设置为身份验证管理器

@Autowired 
public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception { 
    auth.userDetailsService(userDetailsService).passwordEncoder(getShaPasswordEncoder()); 
} 

所以你差不多完成了。由于您使用了Spring-boot,所以它嵌入了tomcat服务器(一个servlet容器)。转到您pom.xml,发现包装标签(通常放置在第一),并将其更改为

<packaging>jar</packaging> 

现在清理并生成项目(在我来说,我使用的NetBeans清洁而建,你可以使用Maven命令)。成功构建后,您会找到一个/target文件夹。转到文件夹并打开终端,使用java -jar music-review-1.0-SNAPSHOT.jar运行该罐子。

您的更新项目可以找到here

0

创建一个名为UserDetailsS​​ervice的接口;

public interface UserDetailsService{ 
    public void someMethod(); 
} 

实现接口作为遵循

@Service 
public class UserDetailsServiceImpl implements UserDetailsService { 
    @Autowired 
    UserDetailsService userDetailsService; 

    @Override 
    public void someMethod() throws Exception { 
     //your implementation 
    } 
}