smack 普通 SASL 到 jabberd
Posted
技术标签:
【中文标题】smack 普通 SASL 到 jabberd【英文标题】:smack Plain SASL to jabberd 【发布时间】:2017-11-06 20:45:19 【问题描述】:我正在使用 smack 4.2.1 并尝试连接到 ejabberd 服务器。 服务器使用来自 auth 的普通 SASL 机制。
如果我使用像 babbler 这样的另一个库,我可以进行身份验证。 但是,我没有运气。
我不断收到以下异常
Exception in thread "main" java.lang.NullPointerException
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:64)
at org.jivesoftware.smack.util.stringencoder.Base64.encode(Base64.java:60)
at org.jivesoftware.smack.util.stringencoder.Base64.encodeToString(Base64.java:42)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:212)
at org.jivesoftware.smack.sasl.SASLMechanism.authenticate(SASLMechanism.java:170)
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:202)
at org.jivesoftware.smack.tcp.XMPPTCPConnection.loginInternal(XMPPTCPConnection.java:386)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:493)
at org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:467)
我的代码是
XMPPTCPConnectionConfiguration c = XMPPTCPConnectionConfiguration.builder().setHost("api.coredial.com")
.setHostAddress(InetAddress.getByName("api.coredial.com")).setDebuggerEnabled(true).setPort(5222)
.setXmppDomain(String.valueOf(JidCreate.bareFrom("api.coredial.com")))
.setUsernameAndPassword(userName,password)
.setHostnameVerifier(new HostnameVerifier()
public boolean verify(String s, SSLSession sslSession)
return true;
).build();
XMPPTCPConnection con = new XMPPTCPConnection(c);
// Connect to the server
con.connect();
//con.login();
con.login(userName,password);
任何建议都会被采纳。
【问题讨论】:
【参考方案1】:在我的 pom.xml 中包含 smack-java7 和 smack-sals-javax 依赖项后,我设法解决了这个问题。
我相信添加 jars 似乎会导致静态初始化程序添加启用普通 sasl 所需的初始化。
【讨论】:
你真的不应该在 2017 年将 jars 添加到你的项目中。使用能够使用 Maven 工件的构建系统。那你就不会奇怪为什么只有一部分 smack 被初始化了。以上是关于smack 普通 SASL 到 jabberd的主要内容,如果未能解决你的问题,请参考以下文章
使用 Smack 集成 facebook 聊天时 SASL 身份验证失败
错误:无法访问未找到 javax.security.sasl.SaslException 的 SaslException 类文件