![](/img/trans.png)
[英]JAVA com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'command find requires authentication'
[英]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.