如何防止多个用户访问同一个文件

时间:2017-07-17 09:31:06

标签: java multithreading servlets thread-safety

我正在Servlet上传文件,对此文件执行必要的操作,然后将此处理后的文件下载到客户端。

我有两种形式multipart / form-data。第一个使用post方法上传文件。第二个是使用get方法下载文件。

DoPost () - >用户选择并上载文件。处理此文件并将其存储在指定位置。此文件保存为File类型的全局变量。

DoGet () - >下载全局File

当用户从Web浏览器上传文件时,其他用户可以从其他Web浏览器下载该文件。 我想这可能是File是全局的原因。我尝试了ThreadLocal,但由于doPostdoGet不在同一个帖子中,因此无效。

有没有办法建议?

2 个答案:

答案 0 :(得分:0)

如果用户将在同一会话中上传和下载文件,则可以在POST操作期间将文件名保存在HttpSession中。在GET期间,您检查HttpSession中是否存在。只有在HttpSession中存在文件时,才允许用户下载文件。

如果用户可以上传文件,然后注销并重新登录并下载文件,那么您需要将文件信息保存在某些持久性存储中,如数据库。

答案 1 :(得分:0)

您是正确的每个请求都是一个不同的线程,但是它们应该链接到同一个会话。在会话中存储您的文件,所有请求都将被排序。