Пользователи видят чужие персональные рекомендации
@Cacheable("recommendations")
public List<ProductDto> recommendations() {
long userId = SecurityContextHolder.getContext()
.getAuthentication() ... // id текущего пользователя
return engine.forUser(userId);
}
После включения кэша все пользователи видят рекомендации того, кто первым открыл страницу после истечения записи. Почему?
- Ключ строится из параметров метода, а у метода их нет — ключ один на всех
- SecurityContext не работает внутри методов с @Cacheable
- Redis не различает сессии разных пользователей
- Кэш сработал до аутентификации, поэтому пользователь не определился
