Upload/Download di BLOB con Google Cloud Storage e Spring Boot [GCP]

  ICT, Rassegna Stampa
image_pdfimage_print

Ciao a tutti ragazzi,

oggi ho deciso di realizzare un esempio molto comune nelle applicazioni. Voglio permettere agli utenti registrati nella mia piattaforma di fare l upload/download di un immagine del profilo utilizzatando delle API REST che si appoggiano a Google Cloud Storage. Per chi non conosce Google Cloud Storage consiglio assolutamente la lettura del mio precedente Articolo:

Introduzione a Google Cloud Storage [GCP]

Riassumendo,

i requisiti che vogliamo implementare sono:

  1. AUTENTICAZIONE: solo gli utenti autenticati possono scaricare o caricare la propria immagine del profilo; Non stiamo quindi parlando di utenti autenticati con google ma autenticati con la mia piattaforma. L autenticazione che svilupperemo sara’ una classica autenticazione su DB utilizzando come DB MySql.
  2. AUTORIZZAZIONE: ovviamente PIPPO non può’ scaricare o sovrascrivere l immagine di PLUTO; Per permettere questo non possiamo utilizzare le ACL in quanto il requisito del punto 1) parla di autenticazione CUSTOM e non quella di Google utilizzata dalle ACL di GCS. Pertanto sara’ compito della logica business che andremo a scrivere garantire l autorizzazione in lettura e scrittura dell immagine del profilo dell utente loggato.

Andremo a sviluppare una soluzione basata su Spring Boot; per l autenticazione utilizzeremo Spring Security con sessione salvata su database utilizzando Spring Session. Le API che andremo a sviluppare saranno quindi le seguenti:

  • POST /login: Endpoint per autenticare l’utente. Una volta verificato che le credenziali postate sono corrette Spring Session in totale trasparenza andrà’  a salvare la sessione nel DB andando a valorizzare nella risposta l header x-auth-token con l ID della sessione. Le richieste per manipolare l immagine del profilo dovranno essere autenticate, ovvero Spring Security e Spring Session con un filtro andranno a verificare la presenza e la validità’ del token contenuto nell’ header x-auth-token.
  • GET /profile-picture: Ritorna l immagine del profilo dell utente loggato (header x-auth-token) se presente o ritorna un errore 404 NOT FOUND.
  • POST /profile-picture: Permette di fare l upload della propria immagine del profilo inviando nella richiesta il BLOB dell immagine come multi-part-form-data nel campo picture. Se già’ presente l immagine verra’ sovrascritta  con la nuova immagine.

Per lo storage utilizzeremo Google Cloud Storage: ho creato il bucket itc_profile_pictures. Ma se non usiamo le ACL di GCS come faremo a gestire l autorizzazione in modo da garantire che un utente possa caricare  e scaricare solo la propria immagine?

Mettiamo le cose in file;

Upload/Download di BLOB con Google Cloud Storage e Spring Boot [GCP]