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

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>