springboot+Mongodb4.4.2登录认证之错误代码: Caused by: java.lang.IllegalStateException: Invalid mongo configur

在SpringBoot2.5.0中配置MongoDB时遇到认证错误,具体表现为SCRAM-SHA-256认证失败。问题出在用户名和密码的配置上,未加引号导致配置解析错误。通过在配置文件中将数据库用户名和密码用双引号括起来,解决了该问题。这可能是因为配置文件解析规则导致的,特别是当存在多个配置文件时,不正确的字段覆盖可能导致MongoDB连接配置无效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体背景:

springboot2.5.0配置mongodb(spring.data.mongodb)
其中mongo版本:
在这里插入图片描述

具体报错:

2023-05-19 01:33:30 ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] --- Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mongodb.UncategorizedMongoDbException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userName='lawdb', source='lawdb', password=<hidden>, mechanismProperties=<hidden>}; nested exception is com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-256, userName='lawdb', source='lawdb', password=<hidden>, mechanismProperties=<hidden>}] with root cause
com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:17027. The full response is {"ok": 0.0, "errmsg": "Authentication failed.", "code": 18, "codeName": "AuthenticationFailed"}
        at com.mongodb.internal.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:175)
        at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:358)
        at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:279)
        at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83)
        at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33)
        at com.mongodb.internal.connection.SaslAuthenticator.sendSaslContinue(SaslAuthenticator.java:231)
        at com.mongodb.internal.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:47)
        at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:74)
        at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:56)
        at com.mongodb.internal.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:278)
        at com.mongodb.internal.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:56)
        at com.mongodb.internal.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:53)
        at com.mongodb.internal.connection.InternalStreamConnectionInitializer.authenticate(InternalStreamConnectionInitializer.java:168)
        at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63)
        at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:144)
        at com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:51)
        at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:431)
        at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:115)
        at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:100)
        at com.mongodb.internal.connection.DefaultServer.getConnection(DefaultServer.java:96)
        at com.mongodb.internal.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:123)
        at com.mongodb.client.internal.ClientSessionBinding$SessionBindingConnectionSource.getConnection(ClientSessionBinding.java:135)
        at com.mongodb.internal.operation.CommandOperationHelper$5.call(CommandOperationHelper.java:209)
        at com.mongodb.internal.operation.OperationHelper.withReadConnectionSource(OperationHelper.java:583)
        at com.mongodb.internal.operation.CommandOperationHelper.executeCommand(CommandOperationHelper.java:205)
        at com.mongodb.internal.operation.AggregateOperationImpl.execute(AggregateOperationImpl.java:189)
        at com.mongodb.internal.operation.AggregateOperation.execute(AggregateOperation.java:300)
        at com.mongodb.internal.operation.CountOperation.execute(CountOperation.java:254)
        at com.mongodb.internal.operation.CountOperation.execute(CountOperation.java:61)
        at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:170)
        at com.mongodb.client.internal.MongoCollectionImpl.executeCount(MongoCollectionImpl.java:223)
        at com.mongodb.client.internal.MongoCollectionImpl.countDocuments(MongoCollectionImpl.java:192)
        at org.springframework.data.mongodb.core.MongoTemplate.lambda$doCount$14(MongoTemplate.java:1131)
        at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:553)
        at org.springframework.data.mongodb.core.MongoTemplate.doCount(MongoTemplate.java:1130)
        at org.springframework.data.mongodb.core.MongoTemplate.count(MongoTemplate.java:1120)
        at org.springframework.data.mongodb.core.ExecutableFindOperationSupport$ExecutableFindSupport.count(ExecutableFindOperationSupport.java:190)
        at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.lambda$getExecution$2(AbstractMongoQuery.java:152)
        at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.doExecute(AbstractMongoQuery.java:132)
        at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:107)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:159)
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)
        at com.sun.proxy.$Proxy86.countByAreaname(Unknown Source)
        at com.law.service.StatisticService.getCaseCountByAreaName(StatisticService.java:39)
        at com.law.controller.StatisticController.getAreaStatisticData(StatisticController.java:72)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:142)
        at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:750)


报错时具体配置:

spring:
  data:
    mongodb:
      database: dbname
      username: username
      password: password
      host: localhost
      port: 17027

解决:给配置的username和password加上引号

看了很多博客,都说使用[uri(mongodb://username:password@host:port/dbname)]或者[host+port+username+password]
但是这种方式在我这(mongo 4.4.2)行不通
无意间加入双引号,发现就ok了,原因不详,有点无厘头,请教大佬

成功时的配置:

spring:
  data:
    mongodb:
      database: dbname
      username: "username"
      password: "password"
      host: localhost
      port: 17027

似乎找到原因:

存在多个配置文件,
而虽然配置文件的优先级不同(加载顺序不同)
但是是覆盖加载
所以可能会出现其他你期望的配置文件中没有配置的字段
结果导致Invalid mongo configuration, either uri or host/port/credentials/replicaSet must be specified

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值