Primi Passi con Spring Security (parte 1)

Introduzione

Spring Security è un framework del progetto Spring che consente di gestire in modo semplice e trasparente l’autenticazione (ovvero chi sei) e la profilazione (ovvero cosa sei autorizzato a fare) degli utenti che accedono ad una applicazione web. In realtà il framework non si limita solamente a questo, infatti Spring Security implementa anche tutta una serie di funzionalità che consentono di fare fronte a molte delle tipiche vulnerabilità di un’applicazione web e che sono ben descritte dal progetto OWASP nella sua Top 10, in particolare:

Il Progetto

Introduciamo i concetti fondamentali di Spring Security implementando una semplice applicazione web composta da una sole pagine, index.jsp che intendiamo securizzare. Per il set-up del progetto, seguiamo le istruzioni descritto nel tutorial Creare una Web Application con Maven, ed utilizziamo il comando Maven:

Quindi eseguiamo le semplici operazioni correttive descritte nell’articolo citato per ottenere il progetto di base, che si compone dei soli file web.xml, index.jsp e pom.xml.

Verifichiamo il corretto funzionamento della web application eseguendone il deploy su Tomcat (che nel frattempo avremo configurato sul nostro Eclipse) e inserendo l’url http://localhost:8080/spring-security/ nel browser. Se tutto è andato bene dovrebbe essere visualizzato il caratteristico messaggio: Hello World!

Configurazione

Dipendenze

Innanzitutto inseriamo nel pom.xml le dipendenze minime necessari per utilizzare Spring Security:

La configurazione di Spring Security può essere realizzata attraverso Java Config (Spring JavaConfig (parte 1)) oppure utilizzando il tradizionale Spring XML application context. Scegliamo questa seconda opzione e seguiamo quando descritto nella documentazione ufficiale al paragrafo Security Namespace Configuration.

web.xml

Modifichiamo il file web.xml dichiarando il filtro DelegatingFilterProxy che collega l’applicazione web all’infrastruttura di Spring Security. Si noti che il nome del filtro springSecurityFilterChain è riservato e non può essere utilizzato per la dichiarazione di una altro bean all’interno del contesto di Spring.

Successivamente dobbiamo configurare l’applicazione in modo che venga caricato il contesto di Spring allo start-up. Configurazione che avviene utilizzando il tradizionale listener ContextLoaderListener di Spring ed indicando come file XML di contesto tutti i file contenuti in una cartella spring che andiamo a collocare all’interno della cartella WEB-INF.

spring-security.xml

Per la configurazione di Spring Security è possibile utilizzare due diversi namespace definiti nella dipendenza spring-security-config. il primo e classico namespace beans definito nello schema http://www.springframework.org/schema/beans oppure il namespace specifico security definito nello schema  http://www.springframework.org/schema/security, e che ci consente di omettere il prefisso security in tutti i tag del namespace.

Procediamo quindi con la seconda opzione e creiamo il file spring-security.xml nella cartella WEB-INF/spring, introducendo la configurazione minima affinché Spring Security venga attivato.

Il tag <html> abilita la web security su tutti gli url, mentre <user-service> consente di definire un servizio di autenticazione in memoria, con gli utenti specificati su file di properties o direttamente all’interno del tag. Si noti che nell’attributo password del tag <user> la password (boss) è preceduta da {noop} che indica che la password non è encodata, ovvero è in chiaro. Ovviamente per la produzione questo è decisamente poco sicura.

Esecuzione dell’Applicazione

Completati gli step precedenti possiamo eseguire nuovamente l’applicazione su Tomcat ed inserire nel browser l’url http://localhost:8080/spring-security/. Questa volta non è visualizzato il messaggio di hello ma Spring Security ci mostra una (rudimentale) maschera di login.

L’accesso alla pagina index.jsp è autorizzato esclusivamente inserendo le credenziali con user java e password boss, ogni altra credenziale viene rigettata dal framework.

Codice Sorgente

Il codice sorgente completo degli esempi presentati è scaricabile qui spring-security.

2 Comments

  1. Complimenti Massimo per gli ottimi articoli che ci regali. Nel presente articolo c’è una piccola distrazione….scrivi “Il tag abilita ….” invece che .

Comments are closed.

© 2018 Java Boss - Theme by HappyThemes