我正在开发一个基于 XMPP 和 Smack API 的聊天服务器,它连接到一个 Openfire 服务器(由一个也和我一起开发的朋友托管)。
所以,我几天前才开始编程(OS X 10.8 上的 Netbeans),今天我继续讨论连接和登录方面。
我可以通过正确选择用户名+密码完美登录:P 但我不知道如何处理无效的登录尝试并让应用程序显示一条消息,然后允许用户重试。
这是我的代码,它在用户按下我的 Swing 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”,但那将是......你知道......错了
在网上四处寻找没有运气之后,我决定去这里,问问,睡觉,第二天早上醒来,提出一些建议;)感谢您的帮助