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错误。你知道它为什么会发生吗?