You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MongoDB Java Driver 4.4通过SSL和密码认证连接副本集

MongoDB Java Driver 4.4 副本集SSL+密码认证连接实现

前置依赖

首先确保项目引入了4.4版本的MongoDB Java同步驱动,Maven坐标如下:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.4.6</version> <!-- 可替换为4.4分支下的最新稳定版 -->
</dependency>

核心配置说明

需要提前准备以下配置参数:

  • 副本集节点地址列表,格式为host1:port1,host2:port2,host3:port3
  • 副本集名称(需和服务端配置完全一致)
  • 认证数据库(默认一般为admin)
  • 认证用户名、密码
  • SSL配置:官方CA签发的证书可直接开启校验,自签名证书需要提前导入JVM信任库或自定义SSLContext

完整实现示例

方式1:通过连接字符串配置(推荐,易维护)

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;

public class MongoReplicaSetConnectionDemo {
    public static void main(String[] args) {
        // 拼接连接字符串
        String connectionStr = "mongodb://<替换为实际用户名>:<替换为实际密码>@host1:27017,host2:27017,host3:27017/" +
                "?replicaSet=<替换为实际副本集名称>" +
                "&authSource=admin" + // 指定认证数据库
                "&ssl=true" + // 开启SSL加密传输
                "&sslInvalidHostNameAllowed=false"; // 生产环境建议关闭主机名不匹配校验,测试环境可临时设为true

        // 创建客户端,try-with-resources语法会自动释放连接
        try (MongoClient mongoClient = MongoClients.create(connectionStr)) {
            // 测试连接,获取test库信息
            MongoDatabase database = mongoClient.getDatabase("test");
            System.out.println("连接成功,数据库名称:" + database.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方式2:通过代码显式配置(适合需要动态调整参数的场景)

如果需要自定义SSLContext(比如用自签名证书不想改全局JVM信任库),可以用这种方式:

import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import com.mongodb.connection.ClusterSettings;
import com.mongodb.connection.SslSettings;
import javax.net.ssl.SSLContext;
import java.util.Arrays;

public class MongoReplicaSetConnectionDemo2 {
    public static void main(String[] args) throws Exception {
        // 1. 配置副本集节点
        ClusterSettings clusterSettings = ClusterSettings.builder()
                .hosts(Arrays.asList(
                        new ServerAddress("host1", 27017),
                        new ServerAddress("host2", 27017),
                        new ServerAddress("host3", 27017)
                ))
                .replicaSetName("<替换为实际副本集名称>")
                .build();

        // 2. 配置身份认证凭证
        MongoCredential credential = MongoCredential.createCredential(
                "<替换为实际用户名>",
                "admin", // 认证数据库
                "<替换为实际密码>".toCharArray()
        );

        // 3. 配置SSL(不需要自定义证书可直接用SslSettings.builder().enabled(true).build())
        SSLContext customSslContext = getCustomSslContext(); // 实现该方法加载自签名证书生成SSLContext
        SslSettings sslSettings = SslSettings.builder()
                .enabled(true)
                .context(customSslContext)
                .invalidHostNameAllowed(false)
                .build();

        // 4. 组装所有配置生成客户端
        MongoClientSettings settings = MongoClientSettings.builder()
                .clusterSettings(clusterSettings)
                .credential(credential)
                .sslSettings(sslSettings)
                .build();

        try (MongoClient mongoClient = MongoClients.create(settings)) {
            MongoDatabase database = mongoClient.getDatabase("test");
            System.out.println("连接成功,数据库名称:" + database.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 自定义SSLContext生成示例,用于加载自签名证书
    private static SSLContext getCustomSslContext() throws Exception {
        // 此处实现读取自签名CA证书、生成SSLContext的逻辑,测试时如果不需要校验可临时返回信任所有证书的上下文(生产环境禁止)
        return SSLContext.getDefault();
    }
}

注意事项

  • 生产环境必须开启SSL证书校验,禁止设置sslInvalidHostNameAllowed=true,避免中间人攻击
  • 如果使用自签名证书,要么将证书导入JRE的cacerts信任库,要么显式传入自定义SSLContext
  • 副本集名称必须和服务端配置的完全一致,否则会连接失败

内容的提问来源于stack exchange,提问作者gil.fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:36:04