如何在Java中对MongoDB进行身份验证

如何在Java中对MongoDB进行身份验证,java,mongodb,spring-boot,spring-data-mongodb,Java,Mongodb,Spring Boot,Spring Data Mongodb,请参阅如何在Java中执行MongoDB身份验证。使用的MongdbJava驱动程序版本是3.4.1。 MongoDB服务器=is 3.4 首先创建ServerAddress实例 <context:annotation-config /> <mongo:mongo-client host="ndc-dv-mongo1.local" port="27017" id="mongo" credentials="UserTest:pass1@dbtest_batch">

请参阅如何在Java中执行MongoDB身份验证。使用的MongdbJava驱动程序版本是3.4.1。 MongoDB服务器=is 3.4

首先创建ServerAddress实例

<context:annotation-config  />

<mongo:mongo-client host="ndc-dv-mongo1.local" port="27017" id="mongo" credentials="UserTest:pass1@dbtest_batch">
    <mongo:client-options connections-per-host="10" connect-timeout="1000" max-wait-time="1500"
        socket-keep-alive="true" socket-timeout="1500" />
</mongo:mongo-client>

<mongo:db-factory dbname="carelogic-batch" mongo-ref="mongo" id="mongoDbFactory" />

<mongo:mapping-converter id="mongoConverter" base-package="com.dmotta.mongotest.model">
    <mongo:custom-converters base-package="com.dmotta.mongotest.model" />
</mongo:mapping-converter>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory" />
    <constructor-arg ref="mongoConverter" />
    <property name="writeConcern" value="SAFE" />
</bean>

<mongo:repositories base-package="com.dmotta.mongotest.repository" />

<bean class="org.springframework.data.mongodb.core.mapping.event.LoggingEventListener" />
<bean class="org.springframework.data.mongodb.core.MongoExceptionTranslator" />

使用mongod--auth,在auth模式下使用application-context-Test.xml启动我的单元测试。现在,一旦获得数据库实例,就可以对其执行操作

它将抛出:

2017-01-27 11:38:16.678  INFO ???? --- [cluster-ClusterId{value='588b777760866a17135c54b5', description='null'}-ndc-dv-mongo1.local:27017] o.m.d.cluster                            : Exception 

in monitor thread while connecting to server ndc-dv-mongo1.local:27017

com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='UserTest', source='dbtest_batch', password=<hidden>, mechanismProperties={}}
    at com.mongodb.connection.SaslAuthenticator.wrapInMongoSecurityException(SaslAuthenticator.java:157) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:37) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:66) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:44) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:162) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:44) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:109) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:46) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:116) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) [mongodb-driver-core-3.4.1.jar:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_101]
Caused by: com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server ndc-dv-mongo1.local:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }
    at com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java:170) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator.sendSaslStart(SaslAuthenticator.java:117) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator.access$000(SaslAuthenticator.java:37) ~[mongodb-driver-core-3.4.1.jar:?]
    at com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:50) ~[mongodb-driver-core-3.4.1.jar:?]
    ... 9 more
2017-01-27 11:38:16.678信息[cluster ClusterId{value='588b777760866a17135c54b5',description='null'}-ndc-dv-mongo1.local:27017]o.m.d.cluster:异常
连接到服务器ndc-dv-mongo1时在监视器线程中。本地:27017
com.mongodb.MongoSecurityException:验证MongoCredential{mechanism=null,userName='UserTest',source='dbtest\u batch',password=,mechanismProperties={}的异常
在com.mongodb.connection.SaslAuthenticator.wrapInMongoSecurityException(SaslAuthenticator.java:157)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:37)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:66)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:44)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator.doAssObject(SaslAuthenticator.java:162)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:44)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:109)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:46)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:116)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunName.run(DefaultServerMonitor.java:113)[mongodb-driver-core-3.4.1.jar:?]
在java.lang.Thread.run(Thread.java:745)[?:1.8.0_101]
原因:com.mongodb.MongoCommandException:命令失败,在服务器ndc-dv-mongo1上出现错误18:“身份验证失败”。本地:27017。完整响应为{“ok”:0.0,“errmsg”:“身份验证失败”,“code”:18,“codeName”:“AuthenticationFailed”}
在com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java:170)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator.sendsalstart(SaslAuthenticator.java:117)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator.access$000(SaslAuthenticator.java:37)~[mongodb-driver-core-3.4.1.jar:?]
在com.mongodb.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:50)~[mongodb-driver-core-3.4.1.jar:?]
... 9更多
要修复此抛出:

是否需要创建用户“UserTest:pass1@dbtest_batch进入特定数据库“dbtest_batch”:

    db.createUser(
   {
     user: "UserTest",
     pwd: "pass1",
     roles: [ 
        {
            "role" : "executeFunctions",
            "db" : "admin"
        },
        {
            "role" : "readWrite",
            "db" : "dbtest_batch"
        }
         ]

   }
)