[Java] Accéder à l'URL signée de s3 (version signée 2)

Je suivrai la page officielle de aws. https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/RESTAuthentication.html

Dans l'en-tête d'authentification Authorization: AWS AWSAccessKeyId:Signature Cependant, il est assez gênant de faire cette signature.

Je l'ai utilisé dans un projet Java, je le posterai donc à la place d'un mémo.

Cette fois, https://[BUCKET].[ENDPOINT]/[FILE_NAME] J'accède avec un certificat.

  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());
    
    //Créer un StringToSign
    String now = df.format(c.getTime());
    String stringToSign="GET" + "\n" + md5 + "\n" + contentType + "\n" + now + "\n" + daHeader + "\n" + resource;

    //Créer une signature
    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");
        

    //Obtenir la demande
    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] Accéder à l'URL signée de s3 (version signée 2)
[Édition Java] Histoire de la sérialisation
Essayez Progate Free Edition [Java II]
Essayez Progate Free Edition [Java I]
[Java] Comment obtenir l'URL de la source de transition
Obtenez l'URL de la destination de la redirection HTTP en Java
[Java] Vérifiez la version JDK du fichier war construit
Remplacez seulement une partie de l'hôte URL par java
Accéder à l'interface réseau avec Java
[Java] Supprimer les éléments de la liste
L'origine des expressions Java lambda
Changer la version de java installée par SDKMAN lors du déplacement de répertoires
Obtenez l'URL publique du fichier privé de Flickr en Java
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
Obtenez le résultat de POST en Java
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
[Java] Obtenez le jour d'un jour spécifique
Mémo: [Java] Vérifiez le contenu du répertoire
Installation de l'agent OMC APM --JAVA Edition-
Comparer les éléments d'un tableau (Java)
[jour: 5] J'ai résumé les bases de Java
Quelles sont les fonctionnalités mises à jour de Java 13
Mesurez facilement la taille des objets Java
Comment savoir quelle version Java d'un fichier de classe a été compilée
Retour sur les bases de Java
Sortie du livre "Introduction à Java"
L'histoire de l'écriture de Java dans Emacs
Vérifiez la version du logiciel Web standard.
[Java] Vérifiez le nombre d'occurrences de caractères
[Java] [Spring] Tester le comportement de l'enregistreur
Java vs JavaScript: quelle est la différence?
Code pour supprimer tous les fichiers du préfixe spécifié dans AWS S3 (Java)
Vérifiez la version de JDK installée et la version de JDK activée
[Java] Gestion des Java Beans dans la chaîne de méthodes
L'histoire de la fabrication d'un Othello ordinaire à Java
[Android] [Java] Gérer l'état de CheckBox de ListView
À propos de l'idée des classes anonymes en Java
L'ordre des modificateurs de méthode Java est fixe
L'histoire de l'apprentissage de Java dans la première programmation
Mesurer la taille d'un dossier avec Java
[Java] Obtenir la longueur de la chaîne de paire de substitution
[Java] La partie déroutante de String et StringBuilder
[Note] Java: mesure la vitesse de concaténation de chaînes
J'ai comparé les caractéristiques de Java et .NET
Gérez la version de Ruby elle-même avec rbenv
[Java] Faites attention au type de clé de la carte
Ressentez le passage du temps même à Java
Modifiez l'URL de l'application du projet Eclipse (Maven).
Calculer le score de similarité des chaînes de caractères avec JAVA
Installez la dernière version de Jenkins sur Ubuntu 16
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
La date et l'heure de java8 ont été mises à jour
[Java] Comment obtenir l'URL redirigée finale
Importer des fichiers de la même hiérarchie en Java