Java 验证Mongo DB时获取异常

Java 验证Mongo DB时获取异常,java,spring,mongodb,sha,Java,Spring,Mongodb,Sha,在Mongo DB中插入记录时出现以下异常 org.springframework.dao.DataAccessResourceFailureException: IOException authenticating the connection; nested exception is com.mongodb.MongoException$Network: IOException authenticating the connection at org.springframework.

在Mongo DB中插入记录时出现以下异常

org.springframework.dao.DataAccessResourceFailureException: IOException authenticating the connection; nested exception is com.mongodb.MongoException$Network: IOException authenticating the connection
    at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:56)
    at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1791)
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:404)
    at org.springframework.data.mongodb.core.MongoTemplate.insertDBObject(MongoTemplate.java:879)
    at org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:709)
    at org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:663)
    at com.yatra.product.seo.service.mongo.MongoJob.singleInsert(MongoJob.java:76)
    at com.yatra.product.seo.service.mongo.MongoJob.myRun(MongoJob.java:96)
    at com.yatra.platform.commons.YatraRunable.run(YatraRunable.java:9)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: com.mongodb.MongoException$Network: IOException authenticating the connection
    at com.mongodb.DBPort$SaslAuthenticator.authenticate(DBPort.java:915)
    at com.mongodb.DBPort.authenticate(DBPort.java:432)
    at com.mongodb.DBPort.checkAuth(DBPort.java:443)
    at com.mongodb.DBTCPConnector.doOperation(DBTCPConnector.java:207)
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:181)
    at com.mongodb.DBCollectionImpl.insertWithWriteProtocol(DBCollectionImpl.java:565)
    at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:195)
    at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:167)
    at com.mongodb.DBCollection.insert(DBCollection.java:93)
    at com.mongodb.DBCollection.insert(DBCollection.java:78)
    at com.mongodb.DBCollection.insert(DBCollection.java:120)
    at org.springframework.data.mongodb.core.MongoTemplate$8.doInCollection(MongoTemplate.java:884)
    at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:402)
    ... 9 more
Caused by: javax.security.sasl.SaslException: Unable to find PBKDF2WithHmacSHA1. [Caused by java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA1 SecretKeyFactory not available]
    at com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.Hi(DBPort.java:829)
    at com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.computeClientFinalMessage(DBPort.java:747)
    at com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.evaluateChallenge(DBPort.java:681)
    at com.mongodb.DBPort$SaslAuthenticator.authenticate(DBPort.java:904)
    ... 21 more
Caused by: java.security.NoSuchAlgorithmException: PBKDF2WithHmacSHA1 SecretKeyFactory not available
    at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:122)
    at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160)
    at com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.Hi(DBPort.java:826)
    ... 24 more
org.springframework.dao.DataAccessResourceFailureException:IOException验证连接;嵌套异常是com.mongodb.MongoException$Network:IOException,用于验证连接
位于org.springframework.data.mongodb.core.MongoExceptionTranslator.TranslateExceptionIfBlability(MongoExceptionTranslator.java:56)
位于org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1791)
位于org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:404)
位于org.springframework.data.mongodb.core.MongoTemplate.insertDBObject(MongoTemplate.java:879)
位于org.springframework.data.mongodb.core.MongoTemplate.doInsert(MongoTemplate.java:709)
位于org.springframework.data.mongodb.core.MongoTemplate.insert(MongoTemplate.java:663)
位于com.yatra.product.seo.service.mongo.MongoJob.singleInsert(MongoJob.java:76)
位于com.yatra.product.seo.service.mongo.MongoJob.myRun(MongoJob.java:96)
位于com.yatra.platform.commons.yatrarun.run(YatraRunable.java:9)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于java.lang.Thread.run(未知源)
原因:com.mongodb.MongoException$Network:IOException正在验证连接
位于com.mongodb.DBPort$SaslAuthenticator.authenticate(DBPort.java:915)
位于com.mongodb.DBPort.authenticate(DBPort.java:432)
位于com.mongodb.DBPort.checkAuth(DBPort.java:443)
位于com.mongodb.DBTCPConnector.doOperation(DBTCPConnector.java:207)
位于com.mongodb.DBTCPConnector.say(DBTCPConnector.java:181)
位于com.mongodb.DBCollectionImpl.insertWithWriteProtocol(DBCollectionImpl.java:565)
位于com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:195)
位于com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:167)
位于com.mongodb.DBCollection.insert(DBCollection.java:93)
位于com.mongodb.DBCollection.insert(DBCollection.java:78)
位于com.mongodb.DBCollection.insert(DBCollection.java:120)
位于org.springframework.data.mongodb.core.MongoTemplate$8.doInCollection(MongoTemplate.java:884)
位于org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:402)
... 9更多
原因:javax.security.sasl.SaslException:找不到带有HMACSHA1的PBKDF2。[由java.security.NoSuchAlgorithmException引起:PBKDF2WithHmacSHA1 SecretKeyFactory不可用]
位于com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.Hi(DBPort.java:829)
在com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.computeClientFinalMessage(DBPort.java:747)上
位于com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.evaluateChallenge(DBPort.java:681)
位于com.mongodb.DBPort$SaslAuthenticator.authenticate(DBPort.java:904)
... 还有21个
原因:java.security.NoSuchAlgorithmException:PBKDF2WithHmacSHA1 SecretKeyFactory不可用
位于javax.crypto.SecretKeyFactory(SecretKeyFactory.java:122)
位于javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160)
位于com.mongodb.DBPort$ScramSha1Authenticator$ScramSha1SaslClient.Hi(DBPort.java:826)
... 还有24个
有人能帮忙吗


谢谢,尽管我们看不到您的代码。有两种可能的方法来解决这个问题

解决方法:添加以下依赖项

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.52</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15</artifactId>
        <version>1.46</version>
    </dependency>

org.bouncycastle
bcpkix-jdk15on
1.52
org.bouncycastle
bcprov-jdk15
1.46
并在使用MongoDB进行身份验证之前添加此指令
Security.addProvider(新的BouncyCastleProvider())

正确的方法:


因为,PBKDF2WithHmacSHA1应该包含在java安装文件夹中。在我看来,我会检查我的环境变量是否正确。如果您使用Windows,我也会检查regedit
HKLM/Software/JavaSoft/Java Runtime-Environment/
,以确保路径也正确。

如果您的Java版本低于1.6,则使用@Charlie的解决方案。 否则,必须缺少java.ext.dirs的系统属性 您可以这样执行java:

java-Djava.ext.dirs=$java_HOME/jre/lib/ext yourApp


享受它。

粘贴您的配置。我们不能仅仅通过查看日志来说明代码中存在什么问题。它应该在SunJCE提供程序下的JDK中提供:这是同一个问题吗?