2017-11-25 137 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 
    } 
}