Java 为什么升级到windows 2012后我的samba连接会失败?
我有一个运行在Tomcat6.0.26(WindowsServer2008R2SP1)上的JSP,它有一个samba(jcifs-1.3.17.jar)连接来列出在远程服务器上找到的文件 在将AD控制器更新到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
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
添加角色和功能向导
,检查是否激活了SMB 1.0/CIFS文件共享支持
:
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
,将DependOnService
的值从SamSS Srv2
更改为SamSS Srv
服务器(LanmanServer)
的属性来验证支持是否已激活:
来源:是哪个补丁删除了向后兼容性?谢谢对不起,我不记得是哪一个了。但在当时,这是最近的一次。也许我可以缩小你的搜索范围。你看到的是2013年8月23日之前出版的一本书,这是事实。通常,我们的服务器管理员不会在发布时立即应用补丁,除非是出于安全考虑。这将使我把重点放在2013年第二或第三季度发布的补丁上。除此之外,我只能猜测。如果你找到了,我相信还有其他人需要知道。