Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么升级到windows 2012后我的samba连接会失败?_Java_Windows_Windows Server 2008 R2_Windows Server 2012_Samba - Fatal编程技术网

Java 为什么升级到windows 2012后我的samba连接会失败?

Java 为什么升级到windows 2012后我的samba连接会失败?,java,windows,windows-server-2008-r2,windows-server-2012,samba,Java,Windows,Windows Server 2008 R2,Windows Server 2012,Samba,我有一个运行在Tomcat6.0.26(WindowsServer2008R2SP1)上的JSP,它有一个samba(jcifs-1.3.17.jar)连接来列出在远程服务器上找到的文件 在将AD控制器更新到Windows 2012(完全修补)之前,这项工作没有任何问题 现在,我不能再列出Samba共享上的文件了 SmbFile sfFile = new SmbFile("smb://myserver.com/share/", "subfolder", new NtlmPasswordAuthe

我有一个运行在Tomcat6.0.26(WindowsServer2008R2SP1)上的JSP,它有一个samba(jcifs-1.3.17.jar)连接来列出在远程服务器上找到的文件

在将AD控制器更新到Windows 2012(完全修补)之前,这项工作没有任何问题

现在,我不能再列出Samba共享上的文件了

SmbFile sfFile = new SmbFile("smb://myserver.com/share/", "subfolder", new NtlmPasswordAuthentication("MYDOM", session.getAttribute("UserID").toString(), session.getAttribute("UserCode").toString()));
SmbFile[] asfDirectoryList = sfFile.listFiles("webversion" + session.getAttribute("PLCode").toString().substring(0,3) + "*.xls");
第二行返回以下异常:

    org.apache.jasper.JasperException: jcifs.smb.SmbException: The network name cannot be found.
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:491)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:407)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause 

    jcifs.smb.SmbException: The network name cannot be found.
    jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:563)
    jcifs.smb.SmbTransport.send(SmbTransport.java:663)
    jcifs.smb.SmbSession.send(SmbSession.java:238)
    jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)
    jcifs.smb.SmbFile.doConnect(SmbFile.java:911)
    jcifs.smb.SmbFile.connect(SmbFile.java:954)
    jcifs.smb.SmbFile.connect0(SmbFile.java:880)
    jcifs.smb.SmbFile.resolveDfs(SmbFile.java:669)
    jcifs.smb.SmbFile.send(SmbFile.java:773)
    jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1986)
    jcifs.smb.SmbFile.doEnum(SmbFile.java:1738)
    jcifs.smb.SmbFile.listFiles(SmbFile.java:1715)
    jcifs.smb.SmbFile.listFiles(SmbFile.java:1681)
    org.apache.jsp.financials.frFinancialsFileListing_jsp._jspService(frFinancialsFileListing_jsp.java:220)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
有人知道为什么会发生这种情况以及如何解决吗

[编辑]
谜团:将AD控制器更新到Windows 2012不应该对访问文件服务器(两者都运行Windows 2008 r2 sp1)上共享的Web服务器产生影响。我就是不明白。

Windows Server 2012包含了最新版本的SMB协议3.0,其中充满了非常有趣的更新和改进(详细信息和一些相关讨论)。与任何重大改进一样,在遗留客户端支持方面存在折衷


可能您的Samba客户端不支持SMB 3.0,或者应该在Server 2012端启用某些向后兼容性。

对于其他有此问题的人,下面是发生的情况

看起来微软已经发布了一个补丁,结束了SMB2之外的向后兼容性。因此,JCIFS将不再工作,因为它是SMB1


在我的例子中,我可以通过消除对共享访问的身份验证来消除对JCIFS的需要。这些文件不包含国家机密,因此允许内部网络上的每个人都拥有读取权限不是问题。因此,现在可以使用java.io中的标准文件对象访问共享。该对象将文件处理传递给操作系统(2008 r2 sp1),这意味着根本不使用/不需要JCIFS库。

对于Windows Server 2012 r2,默认情况下已禁用SMB 1.0。因此,您需要在Windows Server 2012 R2中再次激活SMB 1.0

  • 打开Windows的
    添加角色和功能向导
    ,检查是否激活了
    SMB 1.0/CIFS文件共享支持
  • 通过打开注册表编辑器启用SMB 1.0支持。转到
    HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
    ,将
    DependOnService
    的值从
    SamSS Srv2
    更改为
    SamSS Srv
  • 重新启动Windows
  • 您可以通过检查SMB 1.xxx也已激活的选项卡依赖项中系统服务
    服务器(LanmanServer)
    的属性来验证支持是否已激活:


    来源:

    是哪个补丁删除了向后兼容性?谢谢对不起,我不记得是哪一个了。但在当时,这是最近的一次。也许我可以缩小你的搜索范围。你看到的是2013年8月23日之前出版的一本书,这是事实。通常,我们的服务器管理员不会在发布时立即应用补丁,除非是出于安全考虑。这将使我把重点放在2013年第二或第三季度发布的补丁上。除此之外,我只能猜测。如果你找到了,我相信还有其他人需要知道。