Кэш JCache ACL для Spring Security

Я использую Spring Security ACL, и для него должен быть определен кеш. До сих пор я использовал это:

@Bean(name = { "defaultAclCache", "aclCache" })
protected AclCache defaultAclCache() {
    return new SpringCacheBasedAclCache(defaultAclJCacheFactory(), defaultPermissionGrantingStrategy(), defaultAclAuthorizationStrategy());
}

и все работало нормально. Однако я переключился на использование jcache, и теперь defaultAclJCacheFactory() возвращает экземпляр javax.cache.Cache, который несовместим с SpringCacheBasedAclCache:

@Bean(name = { "defaultAclJCacheFactory", "aclJCacheFactory" })
protected Cache defaultAclJCacheFactory() {
    return cacheManager.getCache("acl_cache");
}

Я попытался найти JCache реализацию org.springframework.security.acls.model.AclCache, но есть только эта для весеннего кеша и одна для EhCache. Есть ли планы ввести его для jcache?


person Petar Tahchiev    schedule 10.06.2014    source источник


Ответы (1)


Вы должны иметь возможность использовать реализацию JCacheCacheManager для получения экземпляра org.springframework.cache.Cache. Например:

@Bean(name = { "defaultAclCache", "aclCache" })
protected AclCache defaultAclCache(org.springframework.cache.CacheManager springCacheManager) {
    org.springframework.cache.Cache cache = 
        springCacheManager.getCache("acl_cache");
    return new SpringCacheBasedAclCache(cache, 
        defaultPermissionGrantingStrategy(), 
        defaultAclAuthorizationStrategy());
}

// Depending on your configuration, you may not even need this
@Bean
public JCacheCacheManager springCacheManager(javax.cache.CacheManager cacheManager) {
    return new JCacheCacheManager(cacheManager);
}
person Rob Winch    schedule 11.06.2014