Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 《春天在行动》第四章作者';s代码不工作(自动连线错误消息)_Spring - Fatal编程技术网

Spring 《春天在行动》第四章作者';s代码不工作(自动连线错误消息)

Spring 《春天在行动》第四章作者';s代码不工作(自动连线错误消息),spring,Spring,我知道Java,但我对IntelliJ和Spring还不熟悉。我使用的是“Spring in Action”一书中提供的代码,所以我知道它应该可以工作。在第4章(安全性)中,程序的SecurityConfig.java文件包含以下行: @Autowired private UserDetailsService userDetailsService; userDetailsService变量高亮显示,并显示以下编译错误: Could not autowire. There is more tha

我知道Java,但我对IntelliJ和Spring还不熟悉。我使用的是“Spring in Action”一书中提供的代码,所以我知道它应该可以工作。在第4章(安全性)中,程序的SecurityConfig.java文件包含以下行:

@Autowired
private UserDetailsService userDetailsService;
userDetailsService变量高亮显示,并显示以下编译错误:

Could not autowire. There is more than one bean of 'UserDetailsService' type.Beans:inMemoryUserDetailsManager (UserDetailsServiceAutoConfiguration.class)userRepositoryUserDetailsService   (UserRepositoryUserDetailsService.java)
你能提供指导吗

虽然我读过,但我不完全理解自动布线。我希望我能附上文件,但显然我做不到。作为一个糟糕的选择,我将把Securityconfig.java文件的代码粘贴在本文的底部(很抱歉这么长)

你能建议我可能需要做什么来解决这个问题吗

Securityconfig.java文件:

//标记::SecurityConfigUserClass[]
包装玉米卷安全;
导入org.springframework.beans.factory.annotation.Qualifier;
导入org.springframework.context.annotation.Bean;
//end::SecurityConfigUserClass[]
//标记::baseBonesImports[]
导入org.springframework.context.annotation.Configuration;
导入org.springframework.security.config.annotation.web
.configuration.EnableWebSecurity;
导入org.springframework.security.config.annotation.web
.configuration.WebSecurity配置适配器;
//结束::baseBonesImports[]
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.security.config.annotation
.authentication.builders.AuthenticationManagerBuilder;
导入org.springframework.security.config.annotation.web
.builders.HttpSecurity;
导入org.springframework.security.core.userdetails.userdetails服务;
导入org.springframework.security.crypto.password.PasswordEncoder;
导入org.springframework.security.crypto.password.StandardPasswordEncoder;
//标记::SecurityConfigUserClass[]
@抑制警告(“弃用”)
@配置
@启用Web安全性
公共类SecurityConfig扩展了WebSecurity配置适配器{
//end::SecurityConfigUserClass[]
//标记::customUserDetailsService[]
//@@userDetailService声明生成了此编译错误:
//“无法自动连线。存在多个UserDetailsService类型的bean”
//IntelliJ support告诉我:
//该错误是由tacos.security.UserRepositoryUserDetailsService引起的,
//其中包含实现UserDetailsService的子句。
//删除该类。
//所以我删除了那个类,错误就消失了。
//但运行时错误:“启动ApplicationContext时出错。”
@自动连线
私有用户详细信息服务用户详细信息服务;
//end::customUserDetailsService[]
//标记::configureHttpSecurity[]
//标记::授权请求[]
//标签::customLoginPage[]
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.授权请求()
.antMatchers(“/design”、“/orders”)
.access(“hasRole('ROLE\u USER')”)
.antMatchers(“/”,“/**”).access(“权限”)
//结束::授权请求[]
.及()
.formLogin()
.login页面(“/login”)
//结束::customLoginPage[]
//标记::enableLogout[]
.及()
.logout()
.logoutSuccessUrl(“/”)
//结束::启用注销[]
//使H2控制台不受保护;用于调试目的
//标记::csrfIgnore[]
.及()
.csrf()
.ignoringAntMatchers(“/h2 console/**”)
//结束::csrfIgnore[]
//允许在来自同一来源的框架中加载页面;H2控制台需要
//标签::框架选项SameoRigin[]
.及()
.headers()
.frameOptions()
.sameOrigin()
//end::frameoptions SameoRigin[]
//标记::授权请求[]
//标签::customLoginPage[]
;
}
//end::configureHttpSecurity[]
//结束::授权请求[]
//结束::customLoginPage[]
/*
//标记::customUserDetailsService[]
@凌驾
受保护的无效配置(AuthenticationManagerBuilder身份验证)
抛出异常{
认证
.userDetailsService(userDetailsService);
}
//end::customUserDetailsService[]
*/
//tag::customUserDetailsService_with PasswordEncoder[]
@豆子
公共密码编码器(){
返回新的标准密码编码器(“53cr3t”);
}
@凌驾
受保护的无效配置(AuthenticationManagerBuilder身份验证)
抛出异常{
认证
.userDetailsService(userDetailsService)
.passwordEncoder(encoder());
}
//end::customUserDetailsService_with PasswordEncoder[]
//
//内存内身份验证示例
//
/*
//标记::在内存[]中配置身份验证
@凌驾
受保护的无效配置(AuthenticationManagerBuilder身份验证)
抛出异常{
认证
.inMemoryAuthentication()
.withUser(“嗡嗡声”)
.密码(“无限”)
.权限(“角色\用户”)
.及()
.withUser(“woody”)
.密码(“bullseye”)
.当局(“角色用户”);
}
//结束::在内存[]中配置身份验证
*/
//
//JDBC身份验证示例
//
/*
//tag::configureAuthentication\u jdbc[]
@自动连线
数据源数据源;
@凌驾
受保护的无效配置(AuthenticationManagerBuilder身份验证)
抛出异常{
认证
.jdbc身份验证()
.数据源(数据源);
}
//end::configureAuthentication\u jdbc[]
*/
/*
//tag::configureAuthentication\u jdbc\u with querys[]
@凌驾
受保护的无效配置(AuthenticationManagerBuilder身份验证)
抛出异常{
认证
.jdbc身份验证()
.dataSource(数据源)
.usersByUsernameQuery(
“选择用户名、密码,从用户启用”+
“其中用户名=?”)
.AuthoritiesByUserName查询(
从UserAuthories中选择用户名、权限+
“其中用户名=?”;
}
//end::configureAuthentication\u jdbc\u with querys[]
*/
/*
//tag::configureAuthentication\u jdbc\u p