[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)

Ich werde der offiziellen Seite von aws folgen. https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/RESTAuthentication.html

Im Authentifizierungsheader Authorization: AWS AWSAccessKeyId:Signature Es ist jedoch ziemlich mühsam, diese Signatur zu erstellen.

Ich habe es zufällig in einem Java-Projekt verwendet, daher werde ich es anstelle eines Memos veröffentlichen.

Diesmal, https://[BUCKET].[ENDPOINT]/[FILE_NAME] Ich greife mit einem Zertifikat zu.

  protected void getFile() throws NoSuchAlgorithmException, InvalidKeyException, ClientProtocolException, IOException {

    String resource= "/" + BUCKET + "/" +FILE_NAME;
    String contentType = "application/octet-stream";
    String md5 = "";
    String daHeader = "x-amz-meta-user:" + USER_ID;
    
  // 
    Calendar c = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
    df.setTimeZone(c.getTimeZone());
    
    //Erstellen eines StringToSign
    String now = df.format(c.getTime());
    String stringToSign="GET" + "\n" + md5 + "\n" + contentType + "\n" + now + "\n" + daHeader + "\n" + resource;

    //Signatur erstellen
    SecretKeySpec sk = new SecretKeySpec(S3_SECRET.getBytes(), "HmacSHA1");
    Mac mac = Mac.getInstance("HmacSHA1");
    mac.init(sk);
    byte[] dataBytes = stringToSign.getBytes("UTF-8");
    byte[] signatureBytes = mac.doFinal(dataBytes);
    String signature = new String(Base64.encodeBase64(signatureBytes), "UTF-8");
        

    //Anfrage erhalten
    HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet request = new HttpGet("https://" + BUCKET + '.' + END_POINT + "/" + FILE_NAME);
    request.setHeader("Host", BUCKET + '.' + END_POINT);
    request.setHeader("Date", now.toString());
    request.setHeader("Content-Type", contentType);
    request.setHeader("Authorization", "AWS" + " " + S3_KEY + ':' + signature);
    request.setHeader("x-amz-meta-user", USER_ID);        
    
    HttpResponse response = client.execute(request);      
  }

Recommended Posts

[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
[Java Edition] Geschichte der Serialisierung
Probieren Sie Progate Free Edition [Java II]
Probieren Sie Progate Free Edition [Java I]
[Java] So erhalten Sie die URL der Übergangsquelle
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
[Java] Überprüfen Sie die JDK-Version der erstellten Kriegsdatei
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
[Java] Löschen Sie die Elemente von List
Der Ursprung von Java-Lambda-Ausdrücken
Wechseln Sie die von SDKMAN installierte Java-Version, wenn Sie Verzeichnisse verschieben
Rufen Sie die öffentliche URL der privaten Datei von Flickr in Java ab
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
Holen Sie sich das Ergebnis von POST in Java
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
[Java] Ermittelt den Tag eines bestimmten Tages
Anmerkung: [Java] Überprüfen Sie den Inhalt des Verzeichnisses
Installation des OMC APM Agent --JAVA Edition-
Vergleichen Sie Elemente eines Arrays (Java)
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Was sind die aktualisierten Funktionen von Java 13
Messen Sie einfach die Größe von Java-Objekten
So finden Sie heraus, welche Java-Version der Klassendatei kompiliert wurde
Rückblick auf die Grundlagen von Java
Ausgabe des Buches "Einführung in Java"
Die Geschichte des Schreibens von Java in Emacs
Überprüfen Sie die Version der Standard-Web-Software.
[Java] Überprüfen Sie die Anzahl der Zeichen
[Java] [Spring] Testen Sie das Verhalten des Loggers
Java vs. JavaScript: Was ist der Unterschied?
Code zum Löschen aller Dateien mit dem angegebenen Präfix in AWS S3 (Java)
Überprüfen Sie die installierte und aktivierte JDK-Version
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
[Android] [Java] Verwalten Sie den Status der CheckBox von ListView
Über die Idee anonymer Klassen in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Geschichte des Lernens von Java in der ersten Programmierung
Messen Sie die Größe eines Ordners mit Java
[Java] Ermittelt die Länge der Ersatzpaarzeichenfolge
[Java] Der verwirrende Teil von String und StringBuilder
[Hinweis] Java: Messen Sie die Geschwindigkeit der Zeichenfolgenverkettung
Ich habe die Eigenschaften von Java und .NET verglichen
Verwalten Sie die Version von Ruby selbst mit rbenv
[Java] Achten Sie auf den Schlüsseltyp der Karte
Spüren Sie den Lauf der Zeit auch in Java
Ändern Sie die URL der Eclipse-Projekt-App (Maven).
Berechnen Sie die Ähnlichkeitsbewertung von Zeichenketten mit JAVA
Installieren Sie die neueste Version von Jenkins unter Ubuntu 16
[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Das Datum und die Uhrzeit von java8 wurden aktualisiert
[Java] So erhalten Sie die endgültige umgeleitete URL
Importieren Sie Dateien derselben Hierarchie in Java