2017-01-13 18 views
1

Spring BootでRESTful APIを開発しており、oAuth2.0Spring Security経由)とAngularJSのフロントエンドで保護されています。安全なRESTful API - ファイルのダウンロード方法

私はwindow.open('urlToTheFileEndpoint');

しかし、そのようにやって使用する必要があることを、私は(すべての私の他のAjaxリクエストのような)セキュリティヘッダを追加することはできません私は、ファイルをダウンロードする必要があると私は読んでおきポストは言う(と私は理解して) 、APIは私の要求が完了するのを許可しません。

これを処理する方法はありますか?または、このファイルエンドポイントを安全でないものにする必要がありますか?

+0

他のエンドポイントにこのようなものがありますか? '?access_token = 3525d0e4-d881-49e7-9f91-bcfd18259109' –

+0

oAuth2.0を使用したSpringセキュリティはそのようには機能しません。 –

答えて

1

だから、これがされ私はissuを解決する方法e:

ユーザーが「ダウンロード」をクリックすると、ファイルを返さないAPIサーバーにajax呼び出しを行いますが、一時的にuuidを返します。サーバーは、ファイルへの実際のルート(つまり、/mnt/data/files/excel_template.xlsx)を含むuuid.routeという一時ファイル(abc-123.route)を作成します。

その後、uuidでajax呼び出しが返されたら、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

2番目のリンクと友人とのいくつかのブレインストーミングが私が実装する解決策を見つけました。ありがとう。 –

関連する問題