当前位置: 首页 > 面试题库 >

将JMeter连接到MongoDb时出现问题:com.mongodb.CommandFailureException…身份验证失败

艾正浩
2023-03-14
问题内容

这是我从Spring Data成功连接到在本地Docker上运行的MongoDb的方式:

aplication.yml:

spring:
  data:
    mongodb:
      host: localhost
      port:  27017
      database: demodb
      authentication-database: admin
      username: root
      password: rootpassword

不幸的是,我无法从JMeter连接到同一个MongoDb。经过几次搜索后,我到达了此Grovy代码(这是我第一次使用Grovy):

import com.mongodb.*
import com.mongodb.BasicDBObject
import org.bson.*

MongoCredential coreCredential = MongoCredential.createCredential("root", "demodb", "rootpassword".toCharArray());
MongoClient coreMongoClient = new MongoClient(new ServerAddress("localhost", 27017), Arrays.asList(coreCredential));
DB coreDB = coreMongoClient.getDB("demodb");
DBCollection coll = coreDB.getCollection("transfer");

BasicDBObject document = new BasicDBObject("id", "3")
.append("origem", "Jimis")
.append("destino", "drpc")
.append("status", 1);

coreDB.getCollection('transfer').insert(document);

完成错误:

-06 18:59:39,561 INFO o.a.j.t.JMeterThread: Thread started: Thread Group 1-1
2020-04-06 18:59:39,588 ERROR o.a.j.p.j.s.JSR223Sampler: Problem in JSR223 script JSR223 Sampler, message: javax.script.ScriptException: com.mongodb.CommandFailureException: { "serverUsed" : "localhost:27017" , "ok" : 0.0 , "errmsg" : "Authentication failed." , "code" : 18 , "codeName" : "AuthenticationFailed"}
javax.script.ScriptException: com.mongodb.CommandFailureException: { "serverUsed" : "localhost:27017" , "ok" : 0.0 , "errmsg" : "Authentication failed." , "code" : 18 , "codeName" : "AuthenticationFailed"}
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324) ~[groovy-all-2.4.16.jar:2.4.16]
    at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72) ~[groovy-all-2.4.16.jar:2.4.16]
    at javax.script.CompiledScript.eval(CompiledScript.java:89) ~[java.scripting:?]
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:223) ~[ApacheJMeter_core.jar:5.2.1]
    at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:71)

PS.:我阅读了其他stackoverflow答案,因此我应该更新JMeter MongoDbjar(现在是mongo-java-driver-2.13.2.jar)

***编辑尝试第三德米特里的建议

import com.mongodb.*
MongoClient mongoClient = MongoClients.create('mongodb://root:rootpassword@localhost/?authSource=admin')

BasicDBObject document = new BasicDBObject("id", "5")
.append("origem", "Jimis")
.append("destino", "drpc")
.append("status", 1);

coreDB.getCollection('transfer').insert(document);

***在照顾到第一个Dmitri的建议后添加:

docker-compose.yml

version: '3.7'

services:
  mongo-express:
    image: mongo-express
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_SERVER: mongo-db
      ME_CONFIG_BASICAUTH_USERNAME: admin
      ME_CONFIG_BASICAUTH_PASSWORD: q
      ME_CONFIG_MONGODB_PORT: 27017
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: rootpassword
    depends_on:
      - mongo-db

    networks:
      - mongo-compose-network

  mongo-db:
    image: mongo:latest
    environment:
      MONGO_INITDB_DATABASE: demodb  
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: rootpassword
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data_container:/data/db
    networks:
      - mongo-compose-network

networks: 
    mongo-compose-network:
      driver: bridge

volumes:
  mongodb_data_container:

在此处输入图片说明

***最终解决方案

我想我犯了这些错误组或其中之一:

  • 我确实导入了我要使用的类。似乎导入com.mongodb。*无法正常运行。
  • 我没有在lib / ext上添加MongoDb Java驱动程序。现在我在lib和lib / ext文件夹中都添加了
  • ssl = true可能是最重大的错误,因为我使用的是Docker并且我没有打开ssl

顺便说一句,这是我为将来的读者提供的解决方案:

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;

//MongoClient mongoClient = MongoClients.create("mongodb://root:rootpassword@localhost:27017/?authSource=userdb&ssl=false");
//MongoClient mongoClient = MongoClients.create("mongodb://root:rootpassword@localhost:27017/?ssl=false");
MongoClient mongoClient = MongoClients.create("mongodb://root:rootpassword@localhost:27017");

MongoDatabase database = mongoClient.getDatabase("demodb");
MongoCollection<Document> collection = database.getCollection("transfer");

//Document document = new Document("firstName", "Expert")
//.append("lastName", "Protocolson")
//.append("age", 37)
//.append("occupation", "DevOps")
//.append("skills", Arrays.asList("System Administration", "Linux"))
//.append("address", new Document("city", "Systemberg")
//.append("street", "Data Line")
//.append("house", 42));

Document document = new Document("_id", 7)
.append("origem", "Jimis")
.append("destino", "drpc")
.append("valor", "999")
.append("status", 3);

collection.insertOne(document);

问题答案:

不知道您的MongoDBdocker映像的详细信息,无法提供全面的答案,到目前为止,我只能想到以下下一步:

  1. 确保您的MongoDB Java驱动程序与您的MongoDB服务器的版本匹配
  2. 您可能需要将用户显式添加到MongoShell中的数据库中,如下所示:

    db.createUser(
        {
            user: "root",
            pwd: "rootpassword",
            roles: [ { role: "dbOwner", db: "demodb" } ]
        }
    

    )

  3. 您可以尝试通过将凭据嵌入到MongoDB连接字符串中来尝试传递凭据的替代方法,例如

    MongoClient mongoClient = MongoClients.create('mongodb://root:rootpassword@localhost/?authSource=admin')
    

详细信息:使用JMeter进行MongoDB性能测试



 类似资料:
  • 我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下

  • 尝试使用从gitlab克隆git帐户时, git克隆git@gitlab.com:用户名/项目。吉特 面对下面的错误, git@gitlab.com:权限被拒绝(公钥)。致命:无法从远程存储库读取。 gitlab是用我的custom.pub公共ssh密钥注册的。windows客户端PC的私有和公共ssh密钥都存储在“C:/用户/用户名/. ssh”中。 如何修复此故障

  • keytab和principl似乎都是正确的。我可以成功运行命令 有谁能进一步帮我。我被这个问题困扰了将近一个星期。如果需要,我可以提供更多的信息。

  • 尝试通过Windows身份验证从Linux机器上运行的Java应用程序连接到MS SQL服务器。连接字符串: jdbc:sqlserver://192.168.1.50\SQLEXPRESS:1433;DatabaseName=MyData;integratedSecurity=true;authenticationScheme=JavaKerberos 出现连接错误: 如何理解此错误以及如何修复

  • 下面是我的服务器的代码。我必须手动为服务器设置身份验证方法吗?还是我做错了什么?

  • 问题内容: 我看到了很多教程,展示了如何使用Java在mongodb中进行身份验证 我将mongodb配置为启用身份验证。在控制台中,我使用 使用管理员 db.auth(“ myUser”,“ newPassword”)并运行良好。 在Java中,在每个访问过的网站中,代码都是 大问题是代码对我不起作用,我也不知道为什么。我测试了显式更改为管理数据库。 这对我来说有效,但这不是解决方案,因为我试图