Spring Boot here。我正在实现自己的UserDetailsService
impl,需要引用/使用Spring提供的UserCache
:
package myorg.myapp;
import org.springframework.security.core.userdetails.UserCache;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class MyUserDetailsService implements UserDetailsService {
@Resource
private UserCache userCache;
...
}
当我去运行我的应用程序时,我收到以下异常消息:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of
type [org.springframework.security.core.userdetails.UserCache] found for dependency: expected at
least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup=, name=, description=, authenticationType=CONTAINER,
type=class java.lang.Object, mappedName=)}
为什么Spring无法找到UserCache
bean的想法?
答案 0 :(得分:8)
您需要在代码中的某处将UserCache实现为@Bean。
NullUserCache是假的'一个实际上没有缓存任何东西的东西。看看code。
SpringCacheBasedUserCache可能就是你想要的。它需要在Cache中传递constructor。此缓存可以是ConcurrentMapCache,EhCacheCache或JCacheCache。
我发现ConcurrentMapCache非常适合本地开发。
我不会在我目前正在处理的任何内容中使用UserCache,但这是我的对象缓存配置。在这个@Configuration文件中,您将看到2个配置文件,一个用于本地开发,一个用于aws部署。希望这会让你前进 - https://gist.github.com/denov/021e9c736d15b1fc56c3e8d185b8ef15
答案 1 :(得分:0)
org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean。