是否有可能做出类似的事情:
MongoClient mongo = new MongoClient(ip, port, usrName, password)
在JAVA中类似于MongoVUE或其他基于SQL的数据库的身份验证方法。
在连接数据库实例期间进行身份验证。
中没有看到合适的实例方法Authentication (Optional) Official docs
中的方式不符合我的目标,因为它需要更改我的应用程序中现在不使用身份验证的所有现有查询方法。
Authenticate to MongoDB with the Java Driver中的方式看起来正是我所需要的,但mongo 2.10.1发行版中没有com.mongodb.MongoCredential类。
答案 0 :(得分:25)
您不需要更改所有现有查询,您只需要更改建立MongoClient的逻辑。大多数应用程序将此作为某种Singleton执行此操作,因此添加身份验证只需修改Singleton。这是一个痛苦的事实,没有签名只需要String,字符串作为用户名密码,但它的Mongo Java API,习惯于失望。
你可以去MongoURI路径,它可以获得最短的签名......
MongoClient mongo = new MongoClient(
new MongoClientURI( "mongodb://app_user:bestPo55word3v3r@localhost/data" )
);
或者使用更详细的List< MongoCredential>路径
List<ServerAddress> seeds = new ArrayList<ServerAddress>();
seeds.add( new ServerAddress( "localhost" );
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(
MongoCredential.createMongoCRCredential(
"app_user",
"data",
"bestPo55word3v3r".toCharArray()
)
);
MongoClient mongo = new MongoClient( seeds, credentials );
答案 1 :(得分:2)
根据Bob Kuhar接受的答案,在Mongo3中,机制已从质询响应更改为SHA1,如代码段所示。我需要按如下方式更新代码段:
String s = "String";
char c = 'c';
答案 2 :(得分:0)
我需要连接到多个主机,还需要连接handle authentication:
使用version 3.12:
List<ServerAddress> seeds = new ArrayList<>();
seeds.add(new ServerAddress("localhost"))
credential = MongoCredential.createScramSha1Credential(
user,
db,
pass.toCharArray()
);
mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(seeds))
.credential(credential)
.build());