Merge pull request #38839 from onobc
* pr/38839: Polish 'Use authParamString to configure Pulsar authentication' Use authParamString to configure Pulsar authentication Closes gh-38839
This commit is contained in:
@@ -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;
|
||||
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 {
|
||||
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 {
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
private interface AuthenticationConsumer {
|
||||
|
||||
void accept(String authPluginClassName, Map<String, String> authParams)
|
||||
throws UnsupportedAuthenticationException;
|
||||
void accept(String authPluginClassName, String authParamString) throws UnsupportedAuthenticationException;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user