如何从Hibernate应用程序处理对MongoDB的身份验证

时间:2017-07-03 16:49:25

标签: java mongodb hibernate authentication

我需要在身份验证期间捕获错误(例如错误的参数)。我一无所知。我用线程来调用程序。但是用这种糟糕的方式,用户无法理解出了什么问题

下面,我的代码:

public static boolean access(String db, String ip, String usr, String pwd){
Map<String, String> persistenceMap = new HashMap<>();

persistenceMap.put("hibernate.ogm.datastore.database", db);
persistenceMap.put("hibernate.ogm.datastore.host", ip);
persistenceMap.put("hibernate.ogm.datastore.username", usr);
persistenceMap.put("hibernate.ogm.datastore.password", pwd);

Thread mainThread = Thread.currentThread();
Thread logThread = new Thread(() -> {
    Connection.EMF = Persistence.createEntityManagerFactory("ogm-jpa-mongo", persistenceMap);
    Connection.EM = Connection.EMF.createEntityManager();
    Connection.isOpen = true;
});
Thread timeOut = new Thread( () -> {
    try{ Thread.sleep( 5000 ); }
    catch(InterruptedException ex){ }
    mainThread.interrupt();
});


logThread.start();
timeOut.start();

try{ logThread.join(); }
catch(InterruptedException ex){ return false; }

Connection.TM = com.arjuna.ats.jta.TransactionManager.transactionManager();

return Connection.isOpen;

}

问题是当我插入worng参数时,会抛出一个MongoSecurityException。但我无法理解,我只能在监视器线程上阅读它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我相信这是您的Hibernate版本捕获MongoSecurityException的方式的结果。我相信MongoSecurityException是在嵌套的try catch块中捕获的。

这里的正确答案是将您的Hibernate版本更新到最新版本。但是,如果您希望看到该异常,我认为您可以执行以下操作。

String message = "";
try { 
   logThread.join(); 
} catch(Throwable e) { 
   throw e;
} catch(Exception e) {
   message = e.getMessage();
}

如果这不起作用,您可以按如下方式进行链接。

String message = "";
try { 
   logThread.join(); 
} catch(Throwable e) { 
   e.getCause();
   e.getCause().getCause();
   e.getCause()..getCause().getCause();
}