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 4.1 SASL 身份验证错误

使用 Smack 集成 facebook 聊天时 SASL 身份验证失败

Smack 连接到服务器失败

python 连接使用LDAP认证的hive

XMPP Smack - 消息被修改

错误:无法访问未找到 javax.security.sasl.SaslException 的 SaslException 类文件