Merge branch '6.2.x'
This commit is contained in:
commit
47775f5167
|
@ -41,8 +41,6 @@ public class PasswordEncoderParser {
|
||||||
|
|
||||||
public static final String ATT_HASH = "hash";
|
public static final String ATT_HASH = "hash";
|
||||||
|
|
||||||
static final String ATT_BASE_64 = "base64";
|
|
||||||
|
|
||||||
static final String OPT_HASH_BCRYPT = "bcrypt";
|
static final String OPT_HASH_BCRYPT = "bcrypt";
|
||||||
|
|
||||||
private static final Map<String, Class<?>> ENCODER_CLASSES = Collections.singletonMap(OPT_HASH_BCRYPT,
|
private static final Map<String, Class<?>> ENCODER_CLASSES = Collections.singletonMap(OPT_HASH_BCRYPT,
|
||||||
|
@ -62,19 +60,17 @@ public class PasswordEncoderParser {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String hash = element.getAttribute(ATT_HASH);
|
String hash = element.getAttribute(ATT_HASH);
|
||||||
boolean useBase64 = StringUtils.hasText(element.getAttribute(ATT_BASE_64))
|
|
||||||
&& Boolean.parseBoolean(element.getAttribute(ATT_BASE_64));
|
|
||||||
String ref = element.getAttribute(ATT_REF);
|
String ref = element.getAttribute(ATT_REF);
|
||||||
if (StringUtils.hasText(ref)) {
|
if (StringUtils.hasText(ref)) {
|
||||||
this.passwordEncoder = new RuntimeBeanReference(ref);
|
this.passwordEncoder = new RuntimeBeanReference(ref);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.passwordEncoder = createPasswordEncoderBeanDefinition(hash, useBase64);
|
this.passwordEncoder = createPasswordEncoderBeanDefinition(hash);
|
||||||
((RootBeanDefinition) this.passwordEncoder).setSource(parserContext.extractSource(element));
|
((RootBeanDefinition) this.passwordEncoder).setSource(parserContext.extractSource(element));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BeanDefinition createPasswordEncoderBeanDefinition(String hash, boolean useBase64) {
|
public static BeanDefinition createPasswordEncoderBeanDefinition(String hash) {
|
||||||
Class<?> beanClass = ENCODER_CLASSES.get(hash);
|
Class<?> beanClass = ENCODER_CLASSES.get(hash);
|
||||||
BeanDefinitionBuilder beanBldr = BeanDefinitionBuilder.rootBeanDefinition(beanClass);
|
BeanDefinitionBuilder beanBldr = BeanDefinitionBuilder.rootBeanDefinition(beanClass);
|
||||||
return beanBldr.getBeanDefinition();
|
return beanBldr.getBeanDefinition();
|
||||||
|
|
|
@ -98,7 +98,7 @@ public class LdapProviderBeanDefinitionParser implements BeanDefinitionParser {
|
||||||
}
|
}
|
||||||
else if (StringUtils.hasText(hash)) {
|
else if (StringUtils.hasText(hash)) {
|
||||||
authenticatorBuilder.addPropertyValue("passwordEncoder",
|
authenticatorBuilder.addPropertyValue("passwordEncoder",
|
||||||
PasswordEncoderParser.createPasswordEncoderBeanDefinition(hash, false));
|
PasswordEncoderParser.createPasswordEncoderBeanDefinition(hash));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
authenticatorBuilder.addConstructorArgValue(contextSource);
|
authenticatorBuilder.addConstructorArgValue(contextSource);
|
||||||
|
|
|
@ -20,10 +20,13 @@ import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.config.BeanDefinition;
|
||||||
import org.springframework.security.config.test.SpringTestContext;
|
import org.springframework.security.config.test.SpringTestContext;
|
||||||
import org.springframework.security.config.test.SpringTestContextExtension;
|
import org.springframework.security.config.test.SpringTestContextExtension;
|
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
|
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
@ -65,4 +68,15 @@ public class PasswordEncoderParserTests {
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testCreatePasswordEncoderBeanDefinition() throws Exception {
|
||||||
|
String hash = "bcrypt";
|
||||||
|
Class<?> expectedBeanClass = BCryptPasswordEncoder.class;
|
||||||
|
|
||||||
|
BeanDefinition beanDefinition = PasswordEncoderParser.createPasswordEncoderBeanDefinition(hash);
|
||||||
|
|
||||||
|
Class<?> actualBeanClass = Class.forName(beanDefinition.getBeanClassName());
|
||||||
|
assertThat(actualBeanClass).isEqualTo(expectedBeanClass);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue