Browse Source

Merge pull request #38839 from onobc

* pr/38839:
  Polish 'Use authParamString to configure Pulsar authentication'
  Use authParamString to configure Pulsar authentication

Closes gh-38839
pull/38854/head
Phillip Webb 2 years ago
parent
commit
3d42dc7c6d
  1. 18
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/pulsar/PulsarPropertiesMapper.java
  2. 6
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/pulsar/PulsarPropertiesMapperTests.java

18
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/pulsar/PulsarPropertiesMapper.java

@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.pulsar; @@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.pulsar;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
@ -29,6 +30,7 @@ import org.apache.pulsar.client.api.ConsumerBuilder; @@ -29,6 +30,7 @@ import org.apache.pulsar.client.api.ConsumerBuilder;
import org.apache.pulsar.client.api.ProducerBuilder;
import org.apache.pulsar.client.api.PulsarClientException.UnsupportedAuthenticationException;
import org.apache.pulsar.client.api.ReaderBuilder;
import org.apache.pulsar.common.util.ObjectMapperFactory;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.pulsar.listener.PulsarContainerProperties;
@ -73,7 +75,8 @@ final class PulsarPropertiesMapper { @@ -73,7 +75,8 @@ final class PulsarPropertiesMapper {
PulsarProperties.Authentication properties) {
if (StringUtils.hasText(properties.getPluginClassName())) {
try {
authentication.accept(properties.getPluginClassName(), properties.getParam());
authentication.accept(properties.getPluginClassName(),
getAuthenticationParamsJson(properties.getParam()));
}
catch (UnsupportedAuthenticationException ex) {
throw new IllegalStateException("Unable to configure Pulsar authentication", ex);
@ -81,6 +84,16 @@ final class PulsarPropertiesMapper { @@ -81,6 +84,16 @@ final class PulsarPropertiesMapper {
}
}
private String getAuthenticationParamsJson(Map<String, String> params) {
Map<String, String> sortedParams = new TreeMap<>(params);
try {
return ObjectMapperFactory.create().writeValueAsString(sortedParams);
}
catch (Exception ex) {
throw new IllegalStateException("Could not convert auth parameters to encoded string", ex);
}
}
<T> void customizeProducerBuilder(ProducerBuilder<T> producerBuilder) {
PulsarProperties.Producer properties = this.properties.getProducer();
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
@ -158,8 +171,7 @@ final class PulsarPropertiesMapper { @@ -158,8 +171,7 @@ final class PulsarPropertiesMapper {
private interface AuthenticationConsumer {
void accept(String authPluginClassName, Map<String, String> authParams)
throws UnsupportedAuthenticationException;
void accept(String authPluginClassName, String authParamString) throws UnsupportedAuthenticationException;
}

6
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/pulsar/PulsarPropertiesMapperTests.java

@ -73,12 +73,13 @@ class PulsarPropertiesMapperTests { @@ -73,12 +73,13 @@ class PulsarPropertiesMapperTests {
void customizeClientBuilderWhenHasAuthentication() throws UnsupportedAuthenticationException {
PulsarProperties properties = new PulsarProperties();
Map<String, String> params = Map.of("param", "name");
String authParamString = "{\"param\":\"name\"}";
properties.getClient().getAuthentication().setPluginClassName("myclass");
properties.getClient().getAuthentication().setParam(params);
ClientBuilder builder = mock(ClientBuilder.class);
new PulsarPropertiesMapper(properties).customizeClientBuilder(builder,
new PropertiesPulsarConnectionDetails(properties));
then(builder).should().authentication("myclass", params);
then(builder).should().authentication("myclass", authParamString);
}
@Test
@ -112,12 +113,13 @@ class PulsarPropertiesMapperTests { @@ -112,12 +113,13 @@ class PulsarPropertiesMapperTests {
void customizeAdminBuilderWhenHasAuthentication() throws UnsupportedAuthenticationException {
PulsarProperties properties = new PulsarProperties();
Map<String, String> params = Map.of("param", "name");
String authParamString = "{\"param\":\"name\"}";
properties.getAdmin().getAuthentication().setPluginClassName("myclass");
properties.getAdmin().getAuthentication().setParam(params);
PulsarAdminBuilder builder = mock(PulsarAdminBuilder.class);
new PulsarPropertiesMapper(properties).customizeAdminBuilder(builder,
new PropertiesPulsarConnectionDetails(properties));
then(builder).should().authentication("myclass", params);
then(builder).should().authentication("myclass", authParamString);
}
@Test

Loading…
Cancel
Save