1

我有一个在 Tomcat 6.0.26 (windows server 2008 r2 sp1) 上运行的 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)。我只是无法理解。

4

3 回答 3

2

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

  1. 打开Add Roles and Features WizardWindows 并检查是否SMB 1.0/CIFS File Shareing Support已激活: 在此处输入图像描述
  2. 通过打开注册表编辑器启用 SMB 1.0 支持。转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer并将DependOnServicefrom的值更改SamSS Srv2SamSS Srv 在此处输入图像描述
  3. 重新启动 Windows

Server (LanmanServer)您可以通过检查SMB 1.xxx 也被激活的依赖项选项卡 中的系统服务属性来验证是否激活了支持:在此处输入图像描述

来源:http ://woshub.com/smb-1-0-support-in-windows-server-2012-r2/#!prettyPhoto

于 2015-09-14T13:22:08.127 回答
1

对于其他遇到此问题的人,这就是发生的事情。

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

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

于 2013-08-29T19:24:18.457 回答
0

Windows Server 2012 包括最新版本的 SMB 协议 3.0,它充满了非常有趣的更新和改进(详情和一些相关讨论在这里)。与任何重大改进一样,在遗留客户端支持方面存在妥协。

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

于 2013-08-25T11:40:17.530 回答