Error creating bean with name 'filterChain' defined in class path resource [com/example/demo/config.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.web.SecurityFilterChain]: Factory method 'filterChain' threw exception; nested exception is java.lang.IllegalStateException: userDetailsService cannot be null. Invoke RememberMeConfigurer#userDetailsService(UserDetailsService) or see its javadoc for alternative approaches.
时间: 2023-07-09 08:35:58 浏览: 370
根据异常信息,可以看出是因为 `userDetailsService` 未被正确配置导致的。`userDetailsService` 是 `RememberMeConfigurer` 的一部分,用于提供用户信息给 Spring Security 的 Remember-Me 功能。
你可以检查以下几个方面:
1. 是否正确配置了 `userDetailsService`,并且已经注入到了 `RememberMeConfigurer` 中,可以尝试在配置类中添加如下代码:
```java
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.rememberMe()
.userDetailsService(userDetailsService);
}
```
2. 是否正确实现了 `UserDetailsService` 接口,该接口提供了根据用户名获取用户信息的方法,例如:
```java
@Service
public class MyUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 根据用户名获取用户信息,并返回 User 对象
// 如果用户不存在,可以抛出 UsernameNotFoundException 异常
}
}
```
3. 是否正确引入了 `spring-security-core` 依赖,可以检查一下 pom.xml 文件中是否存在以下依赖:
```xml
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring-security.version}</version>
</dependency>
```
希望以上方法能够帮助你解决问题。
阅读全文