Avere semplice webapp Primavera di sicurezza con la codifica passwordAutenticazione in Primavera di sicurezza whith password di codifica
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="personService">
<security:password-encoder hash="md5" ref="passwordEncoder">
<!-- <security:salt-source user-property="username"/> -->
</security:password-encoder>
</security:authentication-provider>
</security:authentication-manager>
codifica anche semplice:
person.setPassword(encoder.encodePassword(person.getPassword(), null));
Così nel database verrà codificato tutte le password. Ora voglio eseguire l'autenticazione di alcuni utenti con un determinato nome utente all'interno dell'applicazione. Prima (quando passswords era in chiaro) è stato come questo:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
username, password);
Authentication authentication = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
Ma ora ho codificato password dal DB e non posso fare l'autenticazione come prima.
Il problema. che Spring non sappia che la password proviene da UsernamePasswordAuthenticationToken già codificata. E lo sta codificando per la seconda volta. Chi può aiutare?
Modifica
Così vedo due soluzioni qui:
- implementano DaoAuthenticationProvider personalizzata in cui aggiungere controllo se entrambe le password hash già
- implementare l'autenticazione personalizzati e metterlo nel contesto di protezione manualmente.
Altri? Qual è la migliore?
comprende alcuni dei SpringSecurity in [dettaglio qui] (http://techastute.blogspot.com /2013/01/spring-security-in-detail.html), potrebbe essere utile per qualcuno. – raksja