2017-01-13 94 views
1

我正在開發一個RESTful API,其中Spring BootoAuth2.0(通過Spring Security)和我的AngularJS前端進行了安全保護。安全的RESTful API - 如何下載文件

我需要下載一個文件,每一個崗位我讀到說(我知道),我應該用window.open('urlToTheFileEndpoint');

但這樣做這樣的說法,我不能添加安全標頭(像我的所有其他Ajax請求) ,所以API不允許我的請求完成。

有沒有辦法解決這個問題?或者我應該讓這個文件終結點不安全?

+0

您的其他終端在最後有這樣的事情嗎? '?access_token = 3525d0e4-d881-49e7-9f91-bcfd18259109' –

+0

oAuth2.0的Spring Security不起作用。 –

回答

1

所以這是我將如何解決問題e:

當用戶點擊「下載」時,我會對API服務器進行ajax調用,該服務器不返回文件,但返回臨時文件uuid。服務器將創建一個名爲uuid.route(即:abc-123.route)的臨時文件,並具有到文件的真實路徑(即:/mnt/data/files/excel_template.xlsx)。

然後,當ajax調用返回與uuid,我可以撥打window.open('getFile?uuid=abc-123')。這將是一個不安全的端點。但是一旦它被下載或者在到期時間內,這個路由文件將被刪除,所以它不能再被調用。

這樣,它支持任何文件,任何大小。

這是我最好的辦法。

1

這SO線程可能是有用的:

Download file with a REST request needing headers and giving the content

它還提到的這篇文章:

File Download with HTTP Request Header

這裏是一個片段:

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 
}); 
+1

隨着第二個鏈接和一些朋友的頭腦風暴,我遇到了解決方案。謝謝。 –