我对UserDetailsServiceImpl()有问题
org.springframework.beans.factory.BeanCreationException:创建名为securityConfig的bean时出错:自动安装的依赖项注入失败;构造函数UserDetailsServiceImpl()未定义
@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;
}
应用程序启动失败((
创建一个名为UserDetailsService的接口;
public interface UserDetailsService{
public void someMethod();
}
实现如下接口
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDetailsService userDetailsService;
@Override
public void someMethod() throws Exception {
//your implementation
}
}
我看到了你的项目,并回顾了一些相关内容。在这里,您希望使用自定义用户和自定义用户详细信息服务来实现用户。
1)您的UserDetailsServiceImpl
类实现了UserDetailsService
。注入带有自动加载
注释的UserService
。删除此构造函数或仅对其进行注释。
@Autowired
private UserService userService;
/*public UserDetailsServiceImpl(UserService userService) {
this.userService = userService;
}*/
2)用@Service
注释您的接口UserService
,用@Repository
注释它的实现类UserServiceImpl
,因为它们是Spring组件。
3) 从AppConfig类中删除此Bean。
@Bean
public UserDetailsService userDetailsService(){
return new UserDetailsServiceImpl();
}
4) 当您创建名为UserDetailsServiceImpl的自定义UserDetailsService时,您需要向AuthenticationManagerBuilder介绍您的自定义实现。为此,请使用Autowired注释在SecurityConfig中插入自定义类。
@Autowired
private UserDetailsServiceImpl userDetailsService;
5) 是的,您处于最后阶段。通过设置将此userDetailsService设置为authentication manager
@Autowired
public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(getShaPasswordEncoder());
}
所以你几乎完成了。因为您使用了Spring boot,所以它嵌入了tomcat服务器(servlet容器)。转到您的pom。xml,找到包装标签(通常放在第一位)并将其更改为
<packaging>jar</packaging>
现在清理并构建您的项目(在我的例子中我使用netbean来清理和构建,您可以使用maven命令)。成功构建后,您找到了一个/target
文件夹。转到文件夹并打开终端,使用java-jar Music-reover-1.0-SNAPSHOT. jar
运行jar。
您的更新项目可以在此处找到。