spring-security - 带有 EhCache 3 的 Spring Security ACL

标签 spring-security ehcache ehcache-3 spring-security-acl

我尝试更新到 EhCache 3,但注意到我的 spring-security-acl 的 AclConfig 不再有效。原因是EhCacheBasedAclCache仍在使用 import net.sf.ehcache.Ehcache . EhCache 移至 org.ehcache从第 3 版开始,因此这不再有效。 spring 是否为 EhCache 3 提供了替换类,或者我是否需要实现自己的 Acl 缓存?
这是代码,不再起作用:

@Bean
public EhCacheBasedAclCache aclCache() {
    return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(),
            permissionGrantingStrategy(), aclAuthorizationStrategy());
}

最佳答案

我为您的问题增加了赏金,因为我也在寻找更权威的答案。
这是一个有效的解决方案,但可能有更好的方法,并且可以专门针对 acl 调整缓存设置。

1) JdbcMutableAclService接受任何 AclCache实现,而不仅仅是 EhCacheBasedAclCache .立即可用的实现是 SpringCacheBasedAclCache .你也可以实现自己的。

2) 在您的项目中启用 ehcache3,使用 Spring Cache 作为抽象。在 Spring Boot 中,这就像使用 @EnableCache 一样简单。注解。然后添加@Autowired CacheManager cacheManager在您的 bean 配置类中。

3) 使用 aclCache 的条目更新您的 ehcache3.xml
注意 - key 是 Serializable因为 Spring acl 插入了以 Long 和 ObjectIdentity 为键的缓存条目:)

    <cache alias="aclCache">
        <key-type>java.io.Serializable</key-type>
        <value-type>org.springframework.security.acls.model.MutableAcl</value-type>
        <expiry>
            <ttl unit="seconds">3600</ttl>
        </expiry>
        <resources>
            <heap unit="entries">2000</heap>
            <offheap unit="MB">10</offheap>
        </resources>
    </cache>

4) 更换您的 EhCacheBasedAclCache bean 带SpringCacheBasedAclCache像这样:
    @Bean
    public AclCache aclCache() {
        return new SpringCacheBasedAclCache(
                cacheManager.getCache("aclCache"), 
                permissionGrantingStrategy(), 
                aclAuthorizationStrategy());        
    }

5) 使用 aclCache()JdbcMutableAclService构造函数

关于spring-security - 带有 EhCache 3 的 Spring Security ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56157479/

相关文章:

java - EhCache 的 CacheStatistics getCacheHits 与 getInMemoryHits

java - 创建缓存时如何将所有缓存名称及其数据放入List<>中?

java - Ehcache无法使用java中的Generic类进行初始化

java - InMemoryUserDetailsManager updateUser 调用后未获取更新的密码

java - Eclipse Spring 安全警告 'unable to load namespacehandler'

java - 登录时访问被拒绝页面

caching - 如何在 SAP Commerce (hybris) 中创建新的缓存区域

postgresql - 使任何缓存失效(刷新)的合理时间间隔是多少?

spring - 如何绕过 RestController 上的 Spring @PreAuthorize 注解进行测试?

java - EhCache 3 : How to unwrap statistics bean?