簡體   English   中英

查詢失敗,錯誤代碼 13 和服務器 localhost:27017 上的錯誤消息“命令查找需要身份驗證”

[英]Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017

MongoDB 和 Spring 啟動時出現奇怪的錯誤。 我使用反應式 MongoDb 庫( spring-boot-starter-data-mongodb-reactive )。 當我將 url 放入 application.yml 文件時,它運行良好。

spring:
  data:
    mongodb:
      uri: mongodb://test01:test01@localhost/test_db

但是當我將它移到 MongoConfig class 時,應用程序拋出異常

@EnableReactiveMongoRepositories
public class MongoDBConfig  extends AbstractReactiveMongoConfiguration {
    @Bean
    public MongoClient mongoClient() {
        return MongoClients.create("mongodb://test01:test01@localhost/test_db?authMode=SCRAM-SHA-1");
    }

    @Override
    protected String getDatabaseName() {
        return "test_db";
    }
}

例外

Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication' on server localhost:27017
    at com.mongodb.internal.operation.FindOperation$3.onResult(FindOperation.java:722) ~[mongodb-driver-core-4.0.4.jar:na]
    at com.mongodb.internal.operation.OperationHelper$ReferenceCountedReleasingWrappedCallback.onResult(OperationHelper.java:411) ~[mongodb-driver-core-4.0.4.jar:na]
    at com.mongodb.internal.operation.CommandOperationHelper$10.checkRetryableException(CommandOperationHelper.java:493) ~[mongodb-driver-core-4.0.4.jar:na]

在代碼中使用時,連接字符串似乎不起作用。

你有什么主意嗎? 請幫忙。

您應該指定authSource如下

mongodb://test01:test01@localhost/test_db?authSource=admin

遲到的答案,但以下對我有用。

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("spring.data.mongodb") // to access properties in application.yml file
public class CustomMongoDBConfiguration extends AbstractMongoClientConfiguration {

private String user;
private String password;
private String host;
private String port;
private String database;
private String authSource;
private String authMode;

@Override
protected String getDatabaseName() {
    return this.database;
}

@Override
protected void configureClientSettings(MongoClientSettings.Builder builder) {

    builder
            .credential(MongoCredential.createCredential(this.user, this.database, this.password.toCharArray()))
            .applyToClusterSettings(settings  -> {
                settings.hosts(Collections.singletonList(new ServerAddress(this.host, Integer.parseInt(this.port))));

            });
}

這個 class 應該在調用您的存儲庫的服務中自動裝配。 請參閱以下內容:

public class UserServiceImpl implements UserService, UserDetailsService {

private final CustomMongoDBConfiguration config;
private final UserRepository userRepository;

@Autowired(required = true)
public UserServiceImpl(CustomMongoDBConfiguration config, UserRepository userRepository) {
    this.config = config;
    this.userRepository = userRepository;
}

這應該會有所幫助。

暫無
暫無

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

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