美文网首页我爱编程
mongodb-java 有用户名密码时提示“XXXX(一个加密

mongodb-java 有用户名密码时提示“XXXX(一个加密

作者: 三万_chenbing | 来源:发表于2018-01-23 20:07 被阅读0次

今天写代码,满满的都是坑啊。。特此记录一下。

首先说明一下项目环境:Maven + mongodb-java-driver-3.2.2

原来的项目是用mongo 2.x的驱动写的,然后把它升级到3.x。首先有一个很大的变动就是用户名和密码验证这块。

这是获取MongoClient的方法。

[java] view plain copy

import java.util.ArrayList;  

import java.util.List;  

import java.util.Properties;  

import com.mongodb.MongoClient;  

import com.mongodb.MongoClientURI;  

import com.mongodb.MongoCredential;  

import com.mongodb.ServerAddress;  

/**

 * MongoDBUtils

 * @author administration

 *

 */  

public class DBUtil {  

/**

     * 有用户名密码的方式连接mongoDB(MongoCredential方式)

     * @param mongodbAddr

     * @param databaseName

     * @return

     */  

public static MongoClient getMongoClientByCredent(String mongodbAddr, String databaseName){  

        MongoClient mongoClient;  

Properties p = TDTFile.getProperAddr("db.properties");  

String user = p.getProperty("username");  

String pswd = p.getProperty("password");  

List serverAddrList =new ArrayList();  

ServerAddress serverAddress =new ServerAddress(mongodbAddr);  

        serverAddrList.add(serverAddress);  

List credentialList =new ArrayList();  

        MongoCredential credential = MongoCredential.createCredential(user, databaseName, pswd.toCharArray());  

        credentialList.add(credential);  

mongoClient =new MongoClient(serverAddrList, credentialList);  

return mongoClient;  

    }  

/**

     * 有用户名密码的方式连接mongoDB(URI方式)

     * @param mongodbAddr

     * @param databaseName

     * @return

     */  

public static MongoClient getMongoClientByURI(String mongodbAddr, String databaseName){  

        MongoClient mongoClient;  

Properties p = TDTFile.getProperAddr("db.properties");  

String user = p.getProperty("username");  

String pswd = p.getProperty("password");  

//System.out.println(user + "," + pswd);  

String uri = String.format("mongodb://%s:%s@%s/%s", user, pswd, mongodbAddr, databaseName);  

        System.out.println(uri);  

MongoClientURI mongoClientURI =new MongoClientURI(uri);  

mongoClient =new MongoClient(mongoClientURI);  

return mongoClient;  

    }  

}  

两种方式都没问题,在eclipse下跑的好好的。但是!!用mvn package打包之后就不能用了,经过一晚上家一白天的分析之后,我把错误的根源锁定在了命令行执行命令的语句上。我的语句是这样的:

[html] view plain copy

java -Djava.ext.dirs=../lib 其他参数  

问题就出在这个-D参数,百度得知,-D是设置了相当于外部的环境变量的意思,由于我的main方法要依赖许多第三方jar包,这看起来也没什么错。但是却忽略了一个问题,就是使用-D参数指定其他目录后,java本来需要加载的%JAVA_HOME%\jre\lib\ext\目录下的jar包就不在加载了!!在网上搜了半天-D参数的用法,居然没有人提到过这一点。。可是给我坑苦了。一天的时间就浪费在这里。。

解决方案:

将需要的外部依赖包,包括jdk自带的一些加密算法之类的包,一起用maven打包到lib下。问题解决。顺便说一下,mongodb3.x需要的算法包是:%JAVA_HOME%\jre\lib\ext\sunjce_provider.jar

相关文章

  • mongodb-java 有用户名密码时提示“XXXX(一个加密

    今天写代码,满满的都是坑啊。。特此记录一下。 首先说明一下项目环境:Maven + mongodb-java-dr...

  • 2018-12-27幸运抽奖(4)

    (1) . 输入注册时的用户名和密码,登录成功,提示欢迎信息(2) . 如果用户名和密码输入错误,提示用户...

  • 登录的思考

    为什么用户名或密码错误的时候都是提示“用户名或密码错误”,多写几个判断逻辑,提示“用户名错误”或者“密码错误”不是...

  • 抽奖 四

    #作业要求: 1.输入注册时的用户名和密码,登录成功,提示欢迎信息。 2.如果用户名和密码输入错误,提示用户继续输...

  • 2018-11-01

    练习2: 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,...

  • 第五节课作业第二题

    #作业要求: 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正...

  • 2018-11-01(3)

    作业要求 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,...

  • 2018-11-01

    提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正确,否则,如果...

  • 第五节课第三题

    提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”, 则提示正确,否则,如...

  • 第5节课的第三个作业

    #作业目标: 提示用户输入用户名,然后再提示输入密码,如果用户名是“admin”并且密码是“88888”,则提示正...

网友评论

    本文标题:mongodb-java 有用户名密码时提示“XXXX(一个加密

    本文链接:https://www.haomeiwen.com/subject/utleaxtx.html