升级到Spring和Spring Security 5.2.0后,Mongo身份验证错误

我要升级到Spring 5.2.0.RELEASE,Spring Mongo 2.2.0.RELEASE和Mongo Java Driver 3.11.1。

还将Spring Security升级到5.2.0之后,出现以下身份验证错误。

如果我回到Spring Security 4.2,我不会收到此错误(但是有其他问题)。

此外,以前我使用的是Spring 4.2,并且没有任何身份验证问题。

有什么想法吗?

Caused by: com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1,username='XXX',source='XXX',password=<hidden>,mechanismProperties=<hidden>}
    at com.mongodb.internal.connection.SaslAuthenticator.wrapException(SaslAuthenticator.java:173)
    at com.mongodb.internal.connection.SaslAuthenticator.access$300(SaslAuthenticator.java:40)
    at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:70)
    at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:47)
    at com.mongodb.internal.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:179)
    at com.mongodb.internal.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:47)
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:156)
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:63)
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:129)
    at com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:50)
    at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:398)
    at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:115)
    at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:101)
    at com.mongodb.internal.connection.DefaultServer.getconnection(DefaultServer.java:92)
    at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getconnection(ClusterBinding.java:126)
    at com.mongodb.operation.FindOperation$1.call(FindOperation.java:728)
    at com.mongodb.operation.FindOperation$1.call(FindOperation.java:725)
    at com.mongodb.operation.OperationHelper.withReadConnectionSource(OperationHelper.java:463)
    at com.mongodb.operation.FindOperation.execute(FindOperation.java:725)
    at com.mongodb.operation.FindOperation.execute(FindOperation.java:89)
    at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:189)
    at com.mongodb.client.internal.FindIterableImpl.first(FindIterableImpl.java:205)
    at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2945)
    at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2916)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:2757)
    ... 81 more
Caused by: com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017. 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:303)
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259)
    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:134)
    at com.mongodb.internal.connection.SaslAuthenticator.access$200(SaslAuthenticator.java:40)
    at com.mongodb.internal.connection.SaslAuthenticator$1.run(SaslAuthenticator.java:67)

这是我的appContext-Persistence.xml:

<mongo:mongo-client host="${mongo.host}" port="${mongo.port}" id="mongoClient" replica-set="${mongo.replica.set}"
                    credentials="${mongo.username}:${mongo.password}@${mongo.dbname}">
                <mongo:client-options connections-per-host="${mongo.connections.per.host}"
                    threads-allowed-to-block-for-connection-multiplier="4"
                    connect-timeout="${mongo.connection.timeout}" max-wait-time="${mongo.max.wait.time}"
                    socket-keep-alive="true" socket-timeout="1500" />
</mongo:mongo-client>

<mongo:db-factory dbname="${mongo.dbname}" mongo-ref="mongoClient" id="mongoDbFactory" />

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

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
laodongbei 回答:升级到Spring和Spring Security 5.2.0后,Mongo身份验证错误

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3122317.html

大家都在问