Tener sencilla aplicación web Spring Security con codificación de contraseña:Autenticación en la primavera de Seguridad un poco con la contraseña codificada
<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>
Codificación también sencilla:
person.setPassword(encoder.encodePassword(person.getPassword(), null));
Así que la base de datos se codificará todas las contraseñas. Ahora quiero hacer la autenticación de algún usuario con cierto nombre de usuario dentro de la aplicación. Antes (cuando fue passswords en texto plano) fue la siguiente:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
username, password);
Authentication authentication = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authentication);
Pero ahora tengo codificado contraseña de base de datos y no puede hacer la autenticación como antes.
El problema. That Spring no sabe que la contraseña proviene de UsernamePasswordAuthenticationToken ya codificada. Y lo está codificando por segunda vez. ¿Quién puede ayudar?
Editar
lo tanto, veo dos soluciones aquí:
- implementar DaoAuthenticationProvider personalizada, en la añada de verificación si ambas contraseñas hash ya
- implementar la autenticación personalizada y la puso en el contexto de seguridad de forma manual.
¿Algún otro? ¿Que es lo mejor?
compuesto por algunos de SpringSecurity en [detalle] (http://techastute.blogspot.com /2013/01/spring-security-in-detail.html), puede ser útil para alguien. – raksja