簡體   English   中英

如何使用 4.4 版中的 MongoDB Java 驅動程序連接到使用 SSL 和密碼驗證的副本集?

[英]How do you use the MongoDB Java Driver in version 4.4 to connect to a replica set using SSL and password authentication?

如何使用 4.4 版中的 MongoDB Java 驅動程序連接到使用 SSL 和密碼驗證的副本集?

你能舉一些例子嗎?

為了使用 SSL,您需要在密鑰庫中擁有 CA 證書和私鑰(或者如果您更喜歡兩個不同的密鑰庫)。 雖然您需要設置一些 Java 系統屬性來聲明您的密鑰庫以及如何訪問它們,但所有其他參數都是通過MongoClientSettings.Builder class 設置的。

下面有一個小示例,您可以使用 SSL 和基於密碼的身份驗證連接到 MongoDB 副本集:

public static MongoClient createMongoClient(MongoDBConnectionParameters parameters) {
    MongoClientSettings.Builder builder = MongoClientSettings.builder();
    if(parameters.getPassword() != null) {
        // User name and password
        MongoCredential mongoCredential = com.mongodb.MongoCredential.createCredential(parameters.getUser(),
                parameters.getAuthDB(), parameters.getPassword().toCharArray());
        builder.credential(mongoCredential);
    }
    if(parameters.getServerAddressList() != null) {
        // using replica set
        ArrayList<ServerAddress> serverAddresses = parameters.getServerAddressList().entrySet().stream()
                .map(e -> new ServerAddress(e.getKey(), e.getValue())).collect(Collectors.toCollection(ArrayList::new));
        builder.applyToClusterSettings(b -> b.hosts(serverAddresses));
    } else {
        String connectionString = String.format("mongodb://%s:%d/", parameters.getMongoServer(), parameters.getMongoPort());
        builder.applyConnectionString(new ConnectionString(connectionString));
    }
    if(parameters.isTls()) {
        // using SSL
        builder.applyToSslSettings(b -> b.enabled(true));
        setupSsl(parameters);
    }
    return MongoClients.create(builder.build());
}

private static void setupSsl(MongoDBConnectionParameters parameters) {
    System.setProperty("javax.net.ssl.trustStore", parameters.getTrustStore().toString());
    System.setProperty("javax.net.ssl.trustStoreType", "JKS");
    final String trustStorePassword = "thepassword";
    System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
    System.setProperty("javax.net.ssl.keyStore", parameters.getKeystoreFile().toString());
    System.setProperty("javax.net.ssl.keyStoreType", "JKS");
    String keystorePassword = "thepassword";
    System.setProperty("javax.net.ssl.keyStorePassword", keystorePassword);
}

這是 Maven 與 MongoDB 驅動程序的依賴關系:

<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-sync -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.4.0</version>
</dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM