Questo è il mio scenario:SpringSecurity - Autenticazione personalizzata automatica
- una web-app eseguire una sorta-di SSO per molte applicazioni
- utente connesso di cliccare su un link e l'applicazione fa un post con informazioni utente (nome, pwd [inutili], ruoli) verso la corretta applicazione
- io sono l'attuazione SpringSecurity su una di queste applicazioni di beneficiare del suo potere (autorità di sessione, metodi forniti dalle sue classi, ecc)
Quindi, ho bisogno di sviluppare un filtro personalizzato - Suppongo - che sia in grado di recuperare informazioni utente da richiesta, recuperare dal database, tramite un custom DetailsUserService, ulteriori informazioni sull'utente (email, ecc ...) e quindi eseguire l'autenticazione dell'utente, in base al ruolo recuperato dalla richiesta.
Stavo guardando i filtri Pre-Authentication, ma non sono sicuro che sia la scelta giusta. Sembra che questi oggetti siano usati quando il principal è già in sessione, messo da un precedente machanism di autenticazione (giusto?).
credo che, una volta identificato il filtro corretto, avrei bisogno di eseguire all'interno di qualcosa di simile a:
GrantedAuthority[] ga= new GrantedAuthority[1];
ga[0] = new GrantedAuthorityImpl(myUser.getRole());
SecurityContext sc = SecurityContextHolder.getContext();
Authentication a = new UsernamePasswordAuthenticationToken(userName, userPwd, ga);
a = authenticationManager.authenticate(a);
sc.setAuthentication(a);
È giusta direzione per risolvere il mio problema? Hai suggerimenti per aiutarmi a trovare ciò che manca?
Grazie a tutti,
Luca
AGGIUNTA:
Hi Xearxess! Scusa se ti disturbo ancora ma sembra che la traduzione del tuo codice in base a SpringSecurity 2.0.4 sia più difficile di quanto pensassi: S Il problema è l'XML ... Ho provato una configurazione diversa ma mi sono imbattuto sempre in problemi di namespace, attributi mancanti , ecc ...
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<security:http>
<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:logout logout-url="/logout" logout-success-url="http://milan-ias-vs.usersad.everis.int/DMTest/" invalidate-session="true" />
<security:custom-filter position="PRE_AUTH_FILTER" ref="preAuthenticatedProcessingFilter" />
</security:http>
<bean id="preAuthenticatedProcessingFilter" class="it.novartis.ram.authentication.PreAuthenticatedProcessingFilter">
<custom-filter position="PRE_AUTH_FILTER"/>
<property name="authenticationManager" ref="authenticationManager" />
</bean>
<bean id="preauthAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider">
<property name="preAuthenticatedUserDetailsService">
<bean class="it.novartis.ram.authentication.PreAuthenticatedUserDetailsService" />
</property>
</bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="preauthAuthProvider" />
</security:authentication-manager>
</beans>
Le 2 righe che fanno riferimento elemento CUSTOM-FILTER sono due mete differenti, entrambi firmati come errore. Come posso specificare la posizione del mio filtro come una proprietà?
Anche il riferimento del provider di autenticazione sulla definizione del gestore di autenticazione è contrassegnato come errore. Penso di aver bisogno di specificarlo come una proprietà, giusto?
Spero mi puoi dare l'ultima spinta;) Grazie ancora,
Luca
Grazie mille Xaerxess! Purtroppo siamo bloccati con Spring 2.5.6 e Spring Security 2.0.4, ma i tuoi suggerimenti mi aiuteranno;) – Dolfiz
Peccato, Spring 3 è molto meglio, generico e ha una grande documentazione. Ma una grande quantità di codice sopra può essere trasferita a 2.X (senza generici, per esempio). – Xaerxess
È davvero un peccato! Ma il codice che hai scritto mi aiuterà. Grazie ancora e buon divertimento con il tuo bambino;) – Dolfiz