我正在開發基於XMPP和Smack API的聊天服務器,該服務器連接到Openfire服務器(由也正在開發此項目的朋友託管)。因此,我在幾天前開始對它進行編程(Netbeans on OS X 10.8),今天我開始了連接和登錄方面的工作。如何使用Smack XMPP API處理(失敗的)登錄嘗試
我可以用正確的用戶名+密碼選擇完美登錄:P但我不知道如何處理無效的登錄嘗試,並讓應用程序顯示一條消息,然後允許用戶重試。
這裏是我的代碼,用戶在我的揮杆JForm按下一個按鈕後,它將觸發:
(注:XMPPConnection對象是在另一個類已經創建,連接已經與服務器建立可以看到我打電話從另一個類的對象)
private void btnIniciarSesionActionPerformed(java.awt.event.ActionEvent evt) {
String Usuario = txtUsuario.getText();
String Password = new String (pwdContrasena.getPassword());
if (Usuario.equals("") || Password.equals("")){
// Missing data
JOptionPane.showMessageDialog(null, "Missing data");
}
else{
//Try to login
try{
Proyecto_chat.conexion.login(Usuario, Password, "x");
}
catch (XMPPException ex){
Logger.getLogger(Ventana_login.class.getName()).log(Level.SEVERE, null, ex);
// Problem
}
if (Proyecto_chat.conexion.isAuthenticated() == true){ //Login has been successful
jLabel1.setVisible(false);
System.out.println("Authenticated as " + Usuario);
JOptionPane.showMessageDialog(null, "Authenticated as " + Usuario);
//Exit login window and carry on
}
else{
JOptionPane.showMessageDialog(null, "login error");
}
}
}
我應該用異常我得到發揮? - >
SEVERE: null
SASL authentication DIGEST-MD5 failed: not-authorized:
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:337)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203)
at proyecto_chat.Ventana_login.btnIniciarSesionActionPerformed(Ventana_login.java:159)
at proyecto_chat.Ventana_login.access$100(Ventana_login.java:15)
at proyecto_chat.Ventana_login$2.actionPerformed(Ventana_login.java:73)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
(...) more lines that I think are not critical for this
(大學項目,所以也無所謂)作爲密碼存儲在純文本簡化從應用程序中改變它們,我可以連接到數據庫(PostgreSQL的遠程服務器)從客戶端計算機,並檢查密碼,只有'conexion.login'如果用戶&通過匹配,但這將是...你知道...錯誤
在環顧四周,沒有運氣,我決定要在這裏頭,要求,第二天早上睡覺,並提出一些建議;) 幫助,將不勝感激
其實,主要的問題是,當我嘗試使用無效的用戶名/密碼登錄,一些異常被拋出(除了我建立了一個信息顯示),但應用程序不會讓我再次登錄(就像我更正了我的數據並再次點擊按鈕)。我終於通過放置'來解決這個問題。connect()'在'.login()'方法的後面,並且在發生錯誤登錄時調用'.disconnect()',這樣每次用戶嘗試登錄時都會重新連接服務器。 – fernandopcg 2013-03-28 16:32:02
這將會很棒如果這些功能實際上在連接失敗等方面更「冗長」);) – fernandopcg 2013-04-04 21:29:29