Skip to content

Commit 8f31a57

Browse files
Set authSource in MongoDB Docker Compose connection details
When authentication credentials are provided in environment variables for the official MongoDB Docker image, the authentication source must also be set to the `admin` database. Fixes gh-35777
1 parent 409eb05 commit 8f31a57

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactory.java

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
* @author Moritz Halbritter
3131
* @author Andy Wilkinson
3232
* @author Phillip Webb
33+
* @author Scott Frederick
3334
*/
3435
class MongoDockerComposeConnectionDetailsFactory extends DockerComposeConnectionDetailsFactory<MongoConnectionDetails> {
3536

@@ -73,6 +74,9 @@ private ConnectionString buildConnectionString(RunningService service) {
7374
builder.append(service.ports().get(MONGODB_PORT));
7475
builder.append("/");
7576
builder.append((environment.getDatabase() != null) ? environment.getDatabase() : "test");
77+
if (environment.getUsername() != null) {
78+
builder.append("?authSource=admin");
79+
}
7680
return new ConnectionString(builder.toString());
7781
}
7882

spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/mongo/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.docker.compose.service.connection.mongo;
1818

19+
import com.mongodb.ConnectionString;
1920
import org.junit.jupiter.api.Test;
2021

2122
import org.springframework.boot.autoconfigure.mongo.MongoConnectionDetails;
@@ -29,6 +30,7 @@
2930
* @author Moritz Halbritter
3031
* @author Andy Wilkinson
3132
* @author Phillip Webb
33+
* @author Scott Frederick
3234
*/
3335
class MongoDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests {
3436

@@ -39,8 +41,11 @@ class MongoDockerComposeConnectionDetailsFactoryIntegrationTests extends Abstrac
3941
@Test
4042
void runCreatesConnectionDetails() {
4143
MongoConnectionDetails connectionDetails = run(MongoConnectionDetails.class);
42-
assertThat(connectionDetails.getConnectionString().toString()).startsWith("mongodb://root:secret@")
43-
.endsWith("/mydatabase");
44+
ConnectionString connectionString = connectionDetails.getConnectionString();
45+
assertThat(connectionString.getCredential().getUserName()).isEqualTo("root");
46+
assertThat(connectionString.getCredential().getPassword()).isEqualTo("secret".toCharArray());
47+
assertThat(connectionString.getCredential().getSource()).isEqualTo("admin");
48+
assertThat(connectionString.getDatabase()).isEqualTo("mydatabase");
4449
assertThat(connectionDetails.getGridFs()).isNull();
4550
}
4651

0 commit comments

Comments
 (0)