Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 安全RESTful API-如何下载文件_Angularjs_Ajax_File_Download_Restful Architecture - Fatal编程技术网

Angularjs 安全RESTful API-如何下载文件

Angularjs 安全RESTful API-如何下载文件,angularjs,ajax,file,download,restful-architecture,Angularjs,Ajax,File,Download,Restful Architecture,我正在用Spring Boot开发一个RESTful API,并用oAuth2.0(通过Spring Security)和我的前端AngularJS进行保护 我需要下载一个文件,我读到的每一篇文章都说(我理解)我应该使用window.open('urlToTheFileEndpoint') 但是这样做的话,我不能添加安全头(就像我的其他ajax请求一样),所以API不允许完成我的请求 有办法解决这个问题吗?或者我应该使此文件端点不安全吗?此线程可能有用: 它还提到了这篇文章: 以下是一个片段

我正在用
Spring Boot
开发一个RESTful API,并用
oAuth2.0
(通过
Spring Security
)和我的前端AngularJS进行保护

我需要下载一个文件,我读到的每一篇文章都说(我理解)我应该使用
window.open('urlToTheFileEndpoint')

但是这样做的话,我不能添加安全头(就像我的其他ajax请求一样),所以API不允许完成我的请求


有办法解决这个问题吗?或者我应该使此文件端点不安全吗?

此线程可能有用:

它还提到了这篇文章:

以下是一个片段:

var id = 123;
var req = ic.ajax.raw({
    type: 'GET',
    url: '/api/dowloads/'+id,
    beforeSend: function (request) {
        request.setRequestHeader('token', 'token for '+id);
    },
    processData: false
});

这就是我解决问题的方法:

当用户单击“下载”时,我将对API服务器进行ajax调用,它不会返回文件,而是返回一个临时的
uuid
。服务器将创建一个名为
uuid.route
(即:abc-123.route)的临时文件,其中包含指向该文件的实际路径(即:/mnt/data/files/excel\u template.xlsx)

然后,当ajax调用返回uuid时,我可以调用
window.open('getFile?uuid=abc-123')
。这将是一个不安全的端点。但一旦下载或在过期时间内,此路由文件将被删除,因此无法再次调用

这样,它支持任何文件,任何大小


这是我最好的方法。

您的其他端点是否在末尾有类似的方法
?access_token=3525d0e4-d881-49e7-9f91-bcfd18259109
使用oAuth2.0的Spring安全性不能以这种方式工作。通过第二个链接和与朋友的一些头脑风暴,我将实现解决方案。谢谢