springframework que org ejemplo security spring salt

que - spring security wikipedia



Sal de seguridad de primavera (1)

Usted no autoriza el SaltSource cuando agrega un usuario. SaltSource es una abstracción utilizada por Spring para proporcionar la fuente del salt para la comprobación de contraseñas solamente .

Para crear un hash de contraseña codificado correctamente Acabas de pasar el SaltSource a PasswordEncoder , el valor de la propiedad de username de username , no de SaltSource :

private PasswordEncoder encoder = new Md5PasswordEncoder(); public User createUser(String username, String plainTextPassword) { User u = new User(); u.setUsername(username); u.setPassword(encoder.encodePassword(plainTextPassword, username)); getEntityManager().persist(u); // optional return u; }

Además, el autowire de SaltSource no funcionará hasta que se defina como un bean interno. Podría definir ReflectionSaltSource como bean de nivel superior y pasar su ID al password-encoder , es decir:

<bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource" p:userPropertyToUse="username" /> <bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" /> <bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider" p:passwordEncoder-ref="passwordEncoder" p:saltSource-ref="saltSource" p:userDetailsService-ref="userDetailsService" /> <authentication-manager> <authentication-provider ref="daoAuthenticationProvider" /> </authentication-manager>

Y entonces:

@Autowired private PasswordEncoder passwordEncoder; @Autowired private SaltSource saltSource; public CustomUserDetails createUser(String username, String plainTextPassword) { CustomUserDetails u = new CustomUserDetails(); u.setUsername(username); u.setPassword(passwordEncoder.encodePassword( plainTextPassword, saltSource.getSalt(u))); getEntityNamager().persist(u); // optional return u; }

Estoy tratando de agregar un salt al agregar un nuevo usuario / pwd, pero a los documentos parece que les falta cómo hacerlo.

Aquí hay un ejemplo básico:

<authentication-manager> <authentication-provider user-service-ref="userDetailsService"> <password-encoder hash="md5"> <salt-source user-property="username"/> </password-encoder> </authentication-provider> </authentication-manager>

Puede ver en el ejemplo que no se utiliza un codificador de contraseña personalizado o de sal personalizado.

Entonces, ¿cómo conectaría el Salt al agregar un nuevo usuario / pwd? Asumiría que sería algo como:

@Autowired SaltSource saltSource; protected void foo(final CustomUser user) { final PasswordEncoder encoder = new Md5PasswordEncoder(); user.setPassword(encoder.encodePassword(user.getPassword(), saltSource)); }

Sin embargo, ya que estoy usando los codificadores predeterminados de sal / contraseña y no tengo un bean de sal personalizado, el autowire fallaría.

¿Alguna pista de cómo hacer que esto funcione?