Ehcache避免将敏感数据存储到磁盘?

时间:2014-12-17 17:21:59

标签: ehcache ehcache-bigmemory

我们希望使用Ehcache缓存永远不会存储到磁盘的敏感数据(数据只能驻留在主存储器中)。这种数据完全存储在磁盘上是非法的,因此需要谨慎对待。

我们已经在使用Ehcache(有和没有赤土陶器)用于常见的缓存目的。

我知道Ehcache提供了在主内存和磁盘上缓存的选项,此外它还允许在使用主内存时溢出磁盘。

我是Ehcache的新手,想了解如何配置Ehcache以确保此特定缓存永远不会触及磁盘。 (我们目前主要使用默认配置)此外,一旦我们运行实现(确认没有数据没有存储在磁盘上),有一种方法可以确认数据的存储位置。

2 个答案:

答案 0 :(得分:1)

在缓存级别:

默认情况下,旧版overflowToDisk配置设置为false。现代persistence元素(如果不存在)默认为none。 在这两种情况下,配置的缓存都没有磁盘层,因此不会将任何条目写入磁盘。

如果同一个缓存管理器托管磁盘支持的缓存,它将在配置的文件夹中创建文件 - 或java.io.tmpdir - 它们的路径中将包含缓存名称。由于此名称已编码为在路径中使用,因此可能不容易匹配,但您可以评估没有磁盘后端的缓存没有在此结构中创建的任何文件。

答案 1 :(得分:1)

据我所知,必须明确启用对磁盘的持久性。请参阅文档here。如果你还没有添加这样的配置,我怀疑默认情况下会存储到磁盘。检查你的ehcache配置,你看到任何与持久性或你的缓存的CacheWriter附件有关的内容吗?

我会说,一旦你的服务运行,你可以通过JMX获取缓存配置,以检查是否存在磁盘持久性,如果有,则检查它是否持久存在。您可以通过这种方式启用JMX并自行检查:

CacheManager cm = net.sf.ehcache.CacheManager.getInstance();
MBeanServer mbs = java.lang.management.ManagementFactory.getPlatformMBeanServer();
net.sf.ehcache.management.ManagementService.registerMBeans(cm, mbs, true, true, true, true, true);

例如,bean net.sf.cache / CacheConfiguration / CacheManager / cache / DiskPersistent将告诉您是否启用了磁盘持久性。但是,持久性也可以通过CacheWriter完成。要找到它,您不能使用JConsole,但必须以编程方式附加到MBeanServer并获取属性net.sf.ehcache / Cache / CacheManager / cache / CacheConfiguration。这将返回一个net.sf.ehcache.management.CacheConfiguration实例,该实例应该告诉您已注册的CacheWriter,并希望它正在使用它的配置。 (我自己没试过。)

此外,如果数据机密性对您非常重要,那么您还应该考虑加密数据(在缓存中和线上)。