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
pull/26134/head
Andy Wilkinson 4 years ago committed by Phillip Webb
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…
Cancel
Save