存储 Web 应用的临时数据的最佳做法

2022-09-01 13:56:05

我的最新项目能够使用数据库中的信息生成文档。

因此,我按需将文档模板复制到用户的临时文件夹中并对其进行修改。我这样做是因为每个模板在修改期间都必须可用。

之后,用户通过我的web应用程序的下载链接获得他的文档。

我的问题:是否有存储Web应用程序数据的最佳实践?我以为温度会很好。但是由于我必须自己删除数据,因此我想将其放在tomcat webapp文件夹中的WAR文件夹旁边。

我使用Windows 2003作为Tomcat的主机系统。我使用Grails,Java和Maven进行我的项目...不知道是否需要此信息。

编辑:
我问这个琐碎问题的主要原因是...如果我负责创建/删除我的临时数据...在系统上使用临时文件夹仍然是一个好习惯吗?我不确定这个...


答案 1

在webapp中存储(敏感)用户特定的文件时,请确保将其存储在其中的某个位置,并使用(间接)检查登录用户来访问它们,否则万维网上的任何用户/黑客都可以访问它。优点是可以通过 或 以编程方式轻松访问它。缺点是,每当您重新部署Web应用程序时,它们都会丢失。/WEB-INFServletServletContext#getResource()#getRealPath()

您还可以将它们存储在默认的临时文件夹中。优点是可以通过标准API的类似或访问。临时文件夹的缺点是操作系统控制的文件夹清理无法从 Java 进行控制,因此,每当您关闭资源但以后仍需要它时,您可能会面临丢失内容的风险。File#createTempFile()System.getProperty("java.io.tmpdir")

您还可以将它们存储在 Web 应用外部的固定文件夹中。它的优点是,每当您重新部署Web应用程序时,这些东西都不会丢失。缺点是您需要自己创建具有足够操作系统权限的文件夹,这可能不适用于第三方主机。

清理自己的临时资源当然属于你需要自己完成的任务。我不会认为这是一个问题。

只是超过了优点/缺点。


答案 2
  • 在 Web 应用程序文件夹中存储信息并不总是有效。某些应用程序服务器不扩展已部署的 WAR 文件,因此 Web 应用程序没有“工作目录”。某些系统管理员还会阻止 Web 应用程序文件系统访问(这取决于安全管理器策略)。
  • 临时文件应该用于临时数据。可以按需重建的数据。不要使用用户应该下载的临时文件。例如,当您的系统认为它应该清理临时文件或重新启动应用程序服务器时,用户仍然希望下载此文件,尽管它们可能会同时被删除。
  • 存储此类数据的正确位置是数据库。您的文档在临时文件中并不是真正的临时文档。使用数据库来存储文档,并将数据库用作文档的缓存。然后,您可以实施自己的清理策略。它还充当持久性存储,因此您不必担心服务器重新启动。此外,您还可以在其中包含其他元数据,例如上次访问时间或访问计数器,并轻松地为用户提供他创建的文档列表。如果文档处理库需要进行操作,则只有这样才能将文档从数据库存储到临时文件中,开始处理并将其读回数据库。java.io.File

推荐