我需要将文件保留在内存中,直到它到达操作类并且永远不会将文件写入磁盘。如果文件在磁盘上停留几秒钟,则可能会在文件上传到的服务器上发生某些漏洞攻击。我觉得Struts2框架只针对一个解决方案设置为将文件临时存储到磁盘。这是一个正确的假设,还是我错过了一些非常简单的东西?
答案 0 :(得分:0)
我能想到的一种方法是将struts.multipart.saveDir
设置为文件系统上的目录(例如/tmp
的子目录),并将该目录安装为内存支持的存储。这将确保没有任何东西驻留在磁盘上。
答案 1 :(得分:0)
包含它有一些兴趣,所以我可以结束这个问题,我想分享我是如何完成不将上传的文件临时保存到磁盘的要求。
首先,我让业务部门同意上传文件的合理最大大小,并且一次只允许上传一个文件。如果没有这个协议,我在下面概述的解决方案将无效。
我使用了struts的插件功能。我创建了自己的MutiPartRequest插件和基于JarkartaMultiPartRequest类的类。我注释掉了对文件系统的所有写入。设置最大文件大小为10MB。将解析器中的sizeThreshold设置为大于10MB。通过将sizeThreshold设置为大于maxSize,它在内存中创建了一个包含上载文件的整个字节数组的项。然后我在http请求中创建了一个自定义属性来保存我的内存字节数组,以便我可以在操作类中访问它。没有其他方法可以找到字节数组。
我还有其他一些清理项目,但整体而言,这种方法似乎运作良好。