これは、S3URLを本当に隠す代替手段です。このアプローチでは、実行可能性が制限されたクエリ文字列認証済みURLを作成する代わりに、ユーザーのリクエストを受け取り、ユーザーを承認し、S3データをフェッチして、最後にデータをリクエスターに返します。
このアプローチの利点は、有効期間中のクエリ文字列認証済みURLの場合のように、ユーザーがS3 URLを知る方法がなく、URLを他の人に渡すことができないことです。このアプローチの欠点は、1)S3の「get」の途中に余分な仲介があり、2)S3データが物理的に存在する場所によっては、余分な帯域幅料金が発生する可能性があることです。
public void streamContent( User requestor, String contentFilename, OutputStream outputStream ) throws Exception {
// is the requestor entitled to this content?
Boolean isAuthorized = authorizeUser( requestor, filename );
if( isAuthorized ) {
AWSCredentials myCredentials = new BasicAWSCredentials( s3accessKey, s3secretKey );
AmazonS3 s3 = new AmazonS3Client( myCredentials );
S3Object object = s3.getObject( s3bucketName, contentFilename );
FileCopyUtils.copy( object.getObjectContent(), outputStream );
}
}