Spring 4, Spring MCV 3 e Spring Security 3 – Esempio 3
Ovvero come caricare le informazioni sugli utenti da una classe java e non dal file xml che configura Spring Security. Rispetto all’esempio precedente infatti non cambia nulla, se non che, invece di dichiarare l’elenco degli utenti e dei rispettivi ruoli nel file di configurazione XML, viene simulata la ricerca dell’utente che sta cercando di collegarsi per permettere a Spring Security di eseguire il login.
Da qui al caricamento dinamico via database il passo è breve.
Il risultato finale
Il comportamento del portale è il medesimo dell’esempio precedente.
Versioni utilizzate
Nulla è cambiato anche in questo caso.
Configurazione
Nell’esempio precedente, la configurazione di spring security era la seguente:
<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>
E in questa configurazione sta la differenza: la configurazione del tag authentication-manager diventa:
<authentication-manager alias="authenticationManager"> <authentication-provider user-service-ref="utentiServiceImpl" /> </authentication-manager> |
Il bean a cui si fa riferimento è utentiServiceImpl, che diventa, tramite i meccanismi di autowire di Spring una istanza della classe UtentiServiceImpl:
@Service("utentiServiceImpl") public class UtentiServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // ... } // --- } |
Classe che deve implementare l’interfaccia UserDetailsService ed fornire il metodo loadUserByUsername come da codice.
Spring Security chiede quindi a questa classe informazioni sull’utente che corrisponde ad un determinato username (UserDetails), per confrontarle con quelle digitate nella form di login. Se corrispondono il login ha successo, altrimenti fallisce (da non credere vero…).
Questo è tutto (insieme all’esempio da scaricare).
Leave a Reply