Ensure String to RSA key converters can be used
Add tests to ensure that RSA key converters can be used with an auto-configured security setup. See gh-26089 Closes gh-24891
This commit is contained in:
parent
51c3e18011
commit
f45202e86f
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
package org.springframework.boot.autoconfigure.security.servlet;
|
||||
|
||||
import java.security.interfaces.RSAPublicKey;
|
||||
|
||||
import javax.servlet.DispatcherType;
|
||||
|
||||
import org.assertj.core.api.InstanceOfAssertFactories;
|
||||
|
|
@ -27,6 +29,10 @@ import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoCon
|
|||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.orm.jpa.test.City;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.convert.ApplicationConversionService;
|
||||
import org.springframework.boot.test.context.FilteredClassLoader;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.web.servlet.DelegatingFilterProxyRegistrationBean;
|
||||
|
|
@ -34,6 +40,7 @@ import org.springframework.boot.web.servlet.filter.OrderedFilter;
|
|||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.orm.jpa.JpaTransactionManager;
|
||||
import org.springframework.security.authentication.AuthenticationEventPublisher;
|
||||
import org.springframework.security.authentication.DefaultAuthenticationEventPublisher;
|
||||
|
|
@ -200,6 +207,23 @@ class SecurityAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenAConfigurationPropertyBindingConverterIsDefinedThenBindingToAnRsaKeySucceeds() {
|
||||
this.contextRunner.withUserConfiguration(ConverterConfiguration.class, PropertiesConfiguration.class)
|
||||
.withPropertyValues("jwt.public-key=classpath:public-key-location")
|
||||
.run((context) -> assertThat(context.getBean(JwtProperties.class).getPublicKey()).isNotNull());
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenTheBeanFactoryHasAConversionServiceAndAConfigurationPropertyBindingConverterIsDefinedThenBindingToAnRsaKeySucceeds() {
|
||||
this.contextRunner
|
||||
.withInitializer(
|
||||
(context) -> context.getBeanFactory().setConversionService(new ApplicationConversionService()))
|
||||
.withUserConfiguration(ConverterConfiguration.class, PropertiesConfiguration.class)
|
||||
.withPropertyValues("jwt.public-key=classpath:public-key-location")
|
||||
.run((context) -> assertThat(context.getBean(JwtProperties.class).getPublicKey()).isNotNull());
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@TestAutoConfigurationPackage(City.class)
|
||||
static class EntityConfiguration {
|
||||
|
|
@ -248,4 +272,47 @@ class SecurityAutoConfigurationTests {
|
|||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class ConverterConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConfigurationPropertiesBinding
|
||||
Converter<String, TargetType> targetTypeConverter() {
|
||||
return new Converter<String, TargetType>() {
|
||||
|
||||
@Override
|
||||
public TargetType convert(String input) {
|
||||
return new TargetType();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@EnableConfigurationProperties(JwtProperties.class)
|
||||
static class PropertiesConfiguration {
|
||||
|
||||
}
|
||||
|
||||
@ConfigurationProperties("jwt")
|
||||
static class JwtProperties {
|
||||
|
||||
private RSAPublicKey publicKey;
|
||||
|
||||
RSAPublicKey getPublicKey() {
|
||||
return this.publicKey;
|
||||
}
|
||||
|
||||
void setPublicKey(RSAPublicKey publicKey) {
|
||||
this.publicKey = publicKey;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class TargetType {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue