Java MongoDB异常:无法在同一数据库上进行两次身份验证

时间:2013-05-28 22:17:17

标签: java mongodb authentication

我使用Java驱动程序2.11.1遇到MongoDB用户身份验证问题。我在管理数据库中添加了一些管理员用户(dbAdmins,userAdmins等)。

正如MongoDB教程所建议的,我只使用MongoClient对象的一个​​实例:它实现为单例,因为MongoClient对象就像一个连接池。

如果管理员想要访问数据库,他将使用全局MongoClient实例建立与数据库的新连接(从池中获取一个连接)并调用驱动程序的身份验证方法:示例:< / p>

MongoClient mongoClient = new MongoClient("ip", "port");

DB adminDB = mongoClient.getDB("admin");

boolean isAuth = adminDB.authenticate("Admin", "Admin1234".toCharArray());


DB anotherAdminDB = mongoClient.getDB("admin");

boolean isAuth2 = anotherAdminDB.authenticate("UserAdmin", "UserAdmin1234".toCharArray());

如果我这样做,我将获得例外:

  

java.lang.IllegalStateException:无法在同一个身份验证两次   数据库

但是每个管理员用户都必须使用自己的凭据进行身份验证。有人有这个问题吗?你怎么能解决这个问题?

如果我为每个管理员创建一个新的MongoClient,那么就不会抛出任何异常,一切都是正确的。但后来我无法使用Mongo的连接池。

谢谢你,并致以最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

我认为这种限制是设计的。也许mongodb身份验证在应用程序的上下文中更合适&lt; - &gt;数据库,而不是来自用户&lt; - &gt;应用。如果您需要验证用户对应用程序的访问权限,最好自己实现它(例如:使用Java EE / Spring Security)