我的一个 bean 中有一个 @Cacheable 注释方法,我想使用当前登录的用户 ID 作为缓存的键。但是,我使用 Spring Security 并在此 bean 中有一个 Injected 服务作为实例变量,它调用 SecurityContextHolder.getContext().getAuthentication() 以返回用户 ID。因此,我在 @Cacheable 方法上有一个零参数构造函数。无论如何使用从我的注入服务的方法返回的用户 ID 作为缓存的键?
@Service
public class MyServiceImpl implements MyService {
@Inject
private UserContextService userContextService;
@Override
@Cacheable("myCache")
public String getInformation() {
//use this as the key for the cache entry
String userId = userContextService.getCurrentUser();
return "something";
}
}
用户上下文服务实现:
@Service
public class UserContextServiceImpl implements UserContextService {
public String getCurrentUser() {
return SecurityContextHolder.getContext().getAuthentication().getName();
}
}
我发现了这个问题,但这与我想做的有些不同。我认为静态方法无法实现此功能。