1

我有一個運行在Tomcat 6.0.26(windows server 2008 r2 sp1)上的JSP,它有一個samba(jcifs-1.3.17.jar)連接,用於列出在遠程服務器上找到的文件。爲什麼在升級到windows 2012後我的samba連接失敗?

這個工作沒有任何問題,直到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應該不會影響訪問文件服務器上的共享的Web服務器(它們都運行Windows 2008 R2 SP1)。我無法理解這一點。

回答

2

With 默認情況下,Windows Server 2012 R2的SMB 1.0已被禁用。因此,您需要在Windows Server 2012 R2中再次激活SMB 1.0。

  1. 打開Windows的Add Roles and Features Wizard和檢查SMB 1.0/CIFS File Shareing Support被激活: enter image description here
  2. 啓用打開註冊表編輯器的SMB 1.0的支持。轉到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServerDependOnServiceSamSS Srv2值更改爲SamSS Srv enter image description here
  3. 重新啓動Windows

您可以驗證是否支持通過標籤依賴檢查系統服務Server (LanmanServer)的屬性激活的SMB 1。XXX也被激活: enter image description here

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

0

Windows Server 2012包含最新版本的SMB協議3.0,它充滿了真正有趣的更新和改進(細節和一些相關討論here)。與任何嚴重的改進一樣,在傳統客戶端支持方面也有妥協。

可能在Samba客戶端不支持SMB 3.0,或者應該在Server 2012端啓用某些向後兼容性。

1

對於任何有這個問題的人,這裏是發生了什麼事。

它看起來像微軟已經發布了一個補丁,結束向後兼容超越SMB2。所以,JCIFS將不再工作,因爲它是SMB1。

在我的情況下,我可以通過刪除驗證對共享的訪問權限的需要來刪除對JCIFS的需求。這些文件不包含國家機密,因此允許內部網絡上的每個人都可以讀取權限不是問題。所以現在可以使用java.io中的標準文件對象來訪問共享。該對象將文件處理傳遞給操作系統(2008 r2 sp1),這意味着根本不使用/需要JCIFS庫。

+1

哪個補丁是它是去除落後comppatibility?謝謝 – FiveO

+0

我很抱歉,我不記得它是哪一個。但那是當時最近的一次。所以,也許我可以縮小你的搜索範圍。您正在查看2013年8月23日之前發佈的一個,這是事實。通常情況下,我們的服務器管理員在發佈後不會立即應用修補程序,除非它是安全事物。這將導致我專注於2013年第二季度或第三季度發佈的補丁。除此之外,我只能猜測。發佈它,如果你找到它,我確定還有其他人需要知道。 – WillG

相關問題