Spring 4, Spring MCV 3 e Spring Security 3 – Esempio 2
Questo esempio continua sulla falsa riga del precedente, aggiungendo:
- Passaggio a Spring 4.
- Due utenti gestiti, con due ruoli diversi, ROLE_USER e ROLE_ADMIN.
- Tre zone del portale, una visibile senza autenticazione, una vibile ai due ruoli, e una visibile solo al ruolo ROLE_ADMIN.
- La gestione dell’errore 403, accesso negato.
Il risultato finale
Sono definiti due utenti:
- admin, con ruolo ROLE_ADMIN
- user, con ruolo ROLE_USER
Ci sono tre tre pagine del portale:
- /public: visibile ad utenti non autenticati e autenticati
- /user: visibile solo ad utenti con ruolo ROLE_USER e ROLE_ADMIN
- /admin: visibile solo ad utenti con ruolo ROLE_ADMIN
Se si cerca di accedere alle pagine /user o /admin senza avere eseguito l’autenticazione si viene rediretti alla pagina di login.
Se, loggati con ruolo ROLE_USER, si cerca di accedere a /admin si viene rediretti alla pagina che gestisce l’errore 403.
Versioni utilizzate
- Spring / Spring MVC: 4.0.2-RELEASE
- Spring Security: 3.2.4-RELEASE
- Tiles: 2.2.2
e le relative dipendenze Maven:
<properties> <spring.version>4.0.2.RELEASE</spring.version> <spring.security.version>3.2.3.RELEASE</spring.security.version> <tiles.version>2.2.2</tiles.version> </properties> <!-- Spring 3 dependencies --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring security --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>${spring.security.version}</version> </dependency> |
Configurazione
La configurazione avviene tramite file XML, ed è, per quel che riguarda l’integrazione fra Spring MVC e Spring Security la medesima dell’esempio precedente.
Per quel che riguarda Spring MVC, questa è la configurazione:
<http auto-config="true" use-expressions="true"> <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" /> <intercept-url pattern="/user**" access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" /> <form-login login-page="/login" default-target-url="/" authentication-failure-url="/login?error" username-parameter="user" password-parameter="password"/> <logout logout-success-url="/login?logout" /> <access-denied-handler error-page="/error/403" /> </http> <authentication-manager> <authentication-provider> <user-service> <user name="admin" password="admin" authorities="ROLE_ADMIN" /> <user name="user" password="user" authorities="ROLE_USER" /> </user-service> </authentication-provider> </authentication-manager> |
La definizione degli utenti avviene ancora a livello del file xml, in maniera molto semplice, mentre rispetto all’esempio precedente compare il tag:
<access-denied-handler error-page="/error/403" /> |
che permette di specificare quale sarà la pagina che gestirà l’errore 403 (accesso negato).
Non è cambiato altro rispetto all’esempio precedente, nè come viene fatto il login o il logout, ne quali tags vengono utilizzati.
Leave a Reply