java - Jsch 抑制 : java. lang.ClassNotFoundException : Lorg. ietf.jgss.Oid

标签 java android jsch

由于某种原因,升级到 Lollipop (5.0.2) 后,jsch 停止工作。我收到这个错误。

 Caused by: java.lang.ClassNotFoundException: Didn't find class
    "Lorg.ietf.jgss.Oid" on path: DexPathList[[zip file"/data/app
    /com.**-1/base.apk"],nativeLibraryDirectories= [/vendor/lib, 
    /system/lib]] 
 at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
 ... 14 more
 Suppressed: java.lang.ClassNotFoundException: org.ietf.jgss.Oid 
 at java.lang.Class.classForName(Native Method) 
 at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
 at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
 at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
 ... 15 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the
 boot class loader; no stack available

这是我的代码。

try {
    JSch jsch = new JSch();
    session = jsch.getSession(userName, remoteHost, port);
    session.setPassword(userPassword);

    Properties prop = new Properties();
    prop.put("StrictHostKeyChecking", "no");
    session.setConfig(prop);

    session.connect();

    channel = session.openChannel("sftp");          
    channel.connect();
    channelSftp = (ChannelSftp)channel;

} catch (Exception ex) {
    ex.printStackTrace();
    session.disconnect();
}

我检测到问题发生在添加属性“StrictHostKeyChecking”时,只有在执行“session.connect()”时程序才会关闭。

如果我省略这个属性,程序不会失败,但无法连接。

有什么想法吗?

谢谢。

最佳答案

我遇到了同样的问题。问题是由于找不到与 GSS-API 一起使用的 Lorg.ietf.jgss.Oid。我发现这可以通过首选密码身份验证来避免:

try {
    JSch jsch = new JSch();
    session = jsch.getSession(userName, remoteHost, port);
    session.setPassword(userPassword);

    Properties prop = new Properties();
    prop.put("StrictHostKeyChecking", "no");
    session.setConfig(prop);

    session.setConfig("PreferredAuthentications",
                "password"); //add this line to your code

    session.connect();

    channel = session.openChannel("sftp");          
    channel.connect();
    channelSftp = (ChannelSftp)channel;

} catch (Exception ex) {
    ex.printStackTrace();
    session.disconnect();
}

关于java - Jsch 抑制 : java. lang.ClassNotFoundException : Lorg. ietf.jgss.Oid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411153/

相关文章:

java - 从 HDFS 读取属性文件

java - 构造函数和类型转换

java - Activity 中的 android 异常使所有单例字段为空

android - 使编辑文本出现在android中设备的顶部和软键盘之间

java - JSch 0.1.53 session.connect() 抛出 "End of IO Stream Read"

java - JSch中的 'shell' channel 和 'exec' channel 有什么区别

java - 设置数组大小并将用户输入的字符串解析到数组中

android - 签名验证,Android in app billing 在之前工作后失败

putty - JSch 如何与 PuTTY 私钥一起使用

java - 绘制两个重叠的图像