注入和使用Spring Security UserCache

时间:2016-06-06 14:28:11

标签: caching spring-security spring-boot

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的想法?

2 个答案:

答案 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。