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:
Riassumendo,
i requisiti che vogliamo implementare sono:
- 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.
- 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]


