使用舊版 Java 驅動(Mongo 類)連接 MongoDB 時,db.authenticate() 返回 false,但用戶名、密碼、數據庫名均確認無誤。服務端日誌顯示認證相關錯誤。
這是 MongoDB Java 驅動版本與服務端認證機制不匹配 的典型案例:
Mongo 類屬於 2.x 版驅動(已停止維護)。官方 JIRA SERVER-17459 詳細記錄了此版本兼容性問題。
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.11.1</version> <!-- 或最新穩定版 -->
</dependency>
新版 API 示例:
MongoClientSettings settings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString("mongodb://policeuser:policeuser@10.0.0.47:27017/policecase"))
.build();
try (MongoClient mongoClient = MongoClients.create(settings)) {
MongoDatabase db = mongoClient.getDatabase("policecase");
// 操作集合...
}
在 MongoDB 配置文件(mongod.conf)中添加:
security:
authorization: enabled
setParameter:
authenticationMechanisms: MONGODB-CR,SCRAM-SHA-1
缺點:降低安全性,且 MongoDB 4.0+ 已移除 MONGODB-CR 支持。
authenticate()。ssl=true 並驗證證書。maxPoolSize、minPoolSize 優化高併發性能。認證失敗本質是 驅動版本過舊不支持現代認證協議。升級至 3.x/4.x 驅動並改用連接字符串認證是徹底解決之道,同時能獲得更好的性能、安全性與功能支持。