Java AWS S3上的主机文件可以从特定网站下载,但不能从其他地方下载

Java AWS S3上的主机文件可以从特定网站下载,但不能从其他地方下载,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,我有一个网站,用户可以上传资源(如pdf文件)到他们的帐户。我使用AWS S3托管所有上传的文件,我使用AWS Java SDK 1.8.9.1在我的网站和S3之间进行通信 现在,我想让用户能够下载和查看他们上传的文件,但我只希望这可以通过我的网站实现。也就是说,在我的网站上,用户应该为他们可以单击的每个文件都有一个下载链接,然后开始下载。但是,如果他们复制下载链接的URL并将其发送给他们的朋友,该朋友将无法下载该文件 我知道可以将对S3 bucket的访问限制为指定的引用URL。然而,我也被告

我有一个网站,用户可以上传资源(如pdf文件)到他们的帐户。我使用AWS S3托管所有上传的文件,我使用AWS Java SDK 1.8.9.1在我的网站和S3之间进行通信

现在,我想让用户能够下载和查看他们上传的文件,但我只希望这可以通过我的网站实现。也就是说,在我的网站上,用户应该为他们可以单击的每个文件都有一个下载链接,然后开始下载。但是,如果他们复制下载链接的URL并将其发送给他们的朋友,该朋友将无法下载该文件

我知道可以将对S3 bucket的访问限制为指定的引用URL。然而,我也被告知,这是很容易伪造的,不是一条路要走。我认为可能存在一个带有签名请求的解决方案


如何实现这一点?

您可以修改您的应用程序,以便通过它代理下载链接。i、 e.应用程序应执行与上载过程相反的操作


因此,您可以提供一个指向java应用程序的链接,该链接将转到S3,检索文件并将其返回给用户。这样,如果有人共享链接,您可以保护url并要求用户在下载文件之前登录。

但这不会给我的服务器增加很多工作,这意味着S3上托管文件的整个要点都没有了吗?这取决于您所说的“工作”是什么意思。是的,它会增加很多网络流量,但不会增加CPU负载。不幸的是,你能做的事情不多。您可以使用IAM凭据锁定S3中的文件夹,但是您需要向所有用户提供IAM凭据。此外,我认为S3的主要功能是高可用性和可靠性。你仍然能得到。嗯,我有点惊讶这是唯一的选择。无论如何,如果没有更好的答案,我会接受你的回答。:-:)我不会说这是唯一的选择。但我认为你能做的不多。您需要一种对请求进行身份验证的方法,S3确实提供了一些工具来实现这一点,但是如果您想与身份验证系统集成,那么请求实际上必须通过您的服务器。