前言
项目启动时报错找不到UserDetailsService
Description:
Field userDetailsService in com.haixin.initframework.config.SecurityConfig required a bean of type 'org.springframework.security.core.userdetails.UserDetailsService' that could not be found.
The injection point has the following annotations:
通过学习记录这个问题,笔者发现自己对security这块还是比较欠缺。确实在之前的学习开发中没有系统的学习过这一块,后面还是要对这块系统学习一下。
项目启动时报错找不到UserDetailsService问题原因,解决方案
- 前言
- [1 具体问题](#1 具体问题)
- [2 问题原因](#2 问题原因)
- [3 解决方案](#3 解决方案)
1 具体问题
java
Description:
Field userDetailsService in com.haixin.initframework.config.SecurityConfig required a bean of type 'org.springframework.security.core.userdetails.UserDetailsService' that could not be found.
The injection point has the following annotations:
2 问题原因
错误信息提示,系统在创建com.haixin.initframework.config.SecurityConfig时,里面所需要的org.springframework.security.core.userdetails.UserDetailsService没有被找到。
3 解决方案
UserDetailsService是Spring Security中用于加载用户信息(如用户密码,角色,用户名等)的接口,通常用于身份认证,通过用户的身份信息与数据库中的记录进行匹配。
需要在项目中创建UserDetailsService的实现类。
如下大致代码:
java
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 假设这是从数据库查询到的用户信息
if (!"admin".equals(username)) {
throw new UsernameNotFoundException("用户不存在:" + username);
}
// 创建一个用户,包含用户名、密码和权限信息
return User.withUsername("admin")
.password("{noop}password") // {noop} 表示不加密,仅供测试
.roles("USER")
.build();
}
}