Spring Security ACL with EhCache 3

dfty9e19  于 2023-06-23  发布在  Spring
关注(0)|答案(1)|浏览(74)

我尝试更新到EhCache 3,但注意到我的AclConfig for spring-security-acl不再工作。原因是EhCacheBasedAclCache仍然使用import net.sf.ehcache.Ehcache。EhCache从版本3开始移动到org.ehcache,因此不再工作。spring是否为EhCache 3提供了一个替代类,或者我需要实现自己的Acl Cache?这是代码,它不再工作:

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

qq24tv8q1#

我给你的问题加上了赏金,因为我也在寻找一个更权威的答案。
这里有一个可行的解决方案,但还有更好的方法&可以专门针对acl调整缓存设置。
1)JdbcMutableAclService接受任何AclCache实现,而不仅仅是EhCacheBasedAclCache。立即可用的实现是SpringCacheBasedAclCache。你也可以实现自己的。
2)使用Spring Cache作为抽象在项目中启用ehcache 3。在Sping Boot 中,这就像使用@EnableCache注解一样简单。然后在bean配置类中添加@Autowired CacheManager cacheManager
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)在JdbcMutableAclService构造函数中使用aclCache()

相关问题