Solución:
En spring-security-core:5.0.0.RC1
, el valor por defecto PasswordEncoder
está construido como un DelegatingPasswordEncoder
. Cuando almacena los usuarios en la memoria, está proporcionando las contraseñas en texto sin formato y cuando intenta recuperar el codificador del DelegatingPasswordEncoder
para validar la contraseña, no puede encontrar una que coincida con la forma en que se almacenaron estas contraseñas.
Utilice esta forma para crear usuarios en su lugar.
User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build();
También puede simplemente prefijar {noop}
a sus contraseñas para que DelegatingPasswordEncoder
utilizar el NoOpPasswordEncoder
para validar estas contraseñas. Darse cuenta de NoOpPasswordEncoder
Sin embargo, está en desuso, ya que no es una buena práctica almacenar las contraseñas en texto sin formato.
User.withUsername("user").password("{noop}user").roles("USER").build();
Para obtener más información, consulte esta publicación.
https://spring.io/blog/2017/11/01/spring-security-5-0-0-rc1-released#password-encoding
Usar NoOpPasswordEncoder
por inMemoryAuthentication
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}password")
.roles("USER")
Necesita tener algún tipo de codificador de contraseña, pero
withDefaultPasswordEncoder()
está en desuso y ya no es adecuado para la producción. Use esto en su lugar:
PasswordEncoder encoder =
PasswordEncoderFactories.createDelegatingPasswordEncoder();
...
UserDetails user = User.withUsername("someusername")
.password(encoder.encode("somepassword"))
.roles("USER").build();
Ref: https://docs.spring.io/spring-security/site/docs/5.0.2.BUILD-SNAPSHOT/api/index.html?org/springframework/security/core/userdetails/User.html