1 package org
.argeo
.security
.ldap
;
3 import java
.security
.NoSuchAlgorithmException
;
4 import java
.security
.SecureRandom
;
5 import java
.util
.Random
;
7 import org
.springframework
.ldap
.core
.ContextSource
;
8 import org
.springframework
.security
.providers
.encoding
.PasswordEncoder
;
9 import org
.springframework
.security
.userdetails
.ldap
.LdapUserDetailsManager
;
11 /** Extends {@link LdapUserDetailsManager} by adding password encoding support. */
12 public class ArgeoLdapUserDetailsManager
extends LdapUserDetailsManager
{
13 private PasswordEncoder passwordEncoder
;
14 private final Random random
;
16 public ArgeoLdapUserDetailsManager(ContextSource contextSource
) {
18 this.random
= createRandom();
21 private static Random
createRandom() {
23 return SecureRandom
.getInstance("SHA1PRNG");
24 } catch (NoSuchAlgorithmException e
) {
25 return new Random(System
.currentTimeMillis());
30 public void changePassword(String oldPassword
, String newPassword
) {
31 super.changePassword(oldPassword
, encodePassword(newPassword
));
34 protected String
encodePassword(String password
) {
35 if (!password
.startsWith("{")) {
36 byte[] salt
= new byte[16];
37 random
.nextBytes(salt
);
38 return passwordEncoder
.encodePassword(password
, salt
);
44 public void setPasswordEncoder(PasswordEncoder passwordEncoder
) {
45 this.passwordEncoder
= passwordEncoder
;