2015-04-27 71 views
1

我已經使用Commons IO來編寫一個程序,複製文件和其他東西。但我想將文件複製到本地IP地址\\10.x.x.x,但用戶無權執行復制,因此我需要輸入ID和密碼才能訪問它。但是我無法找到一種方法可以做到這一點。將文件複製到本地網絡中的一臺機器與認證

要移動的文件我用:

FileUtils.moveFileToDirectory(fichier, destDir,true);

但我的目錄是一樣的東西\\10.x.x.x\files,只有少數用戶可以在該目錄中寫,所以我有一個ID &密碼,讓你有移動文件。我希望即使用戶無權將文件移動到該目錄,我的程序也可以執行此操作。

回答

1

它是不是真正的Windows安全工作方式。如果你真的想這樣做,你將不得不使用Java Native Interface或Java Native Access,並設法調用Mpr.dll中的WNetAddConnection函數(並且不要忘記在完成時調用WNetCancelConnection)。

但是你將不得不在你的程序中存儲一個密碼,這是一個糟糕的安全實踐。

要做到這一點的標準方法是啓動一個服務,該服務可以在有權訪問所需目錄的用戶下運行,並讓您的程序使用任何您想要的與其進行通信,最簡單的方法可能是TCP/IP。但除非你有特別的要求,我不會推薦使用Jave來處理這些類型的程序。

更多的Java替代方法是在有權訪問該目錄的用戶下運行的服務器計算機上啓動Tomcat服務。這樣你只需開發一個標準的Java Web應用程序就可以上傳文件,將文件保存到正確的目錄。但它將是一個傳統的和可移植的Java應用程序,不需要JNI和JNA。

如果不能使用Tomcat和不願意進行投資,以多就可以了,你可以在塊拆分方案:

  • 一個客戶端程序上的目錄拷貝文件(服務器上)與文件創建權利爲每個人 - 可以衰減到copy實用程序,如果沒有更多必須完成或可以輕鬆地用Java編寫
  • 一個服務器程序,將在目標目錄上具有完全寫入權限的用戶下的服務器計算機上運行。這其中,也可以很容易地用Java編寫的
  • 您可以輕鬆地爲srvany服務器計算機上的服務與sc並根據this answer上ServerFault安裝服務器程序

如果你使用一個客戶端程序,你可以輕鬆地爲每個複製的文件添加一個數字簽名文件,但正如我上面所說的那樣,這是一種很差的安全實踐,並且增加了很少的安全性。至少該程序應該是可執行的並且不可讀,並且源應該被隱藏。最好記錄複製文件的用戶,並詢問他們發現了什麼問題。

+0

我無法啓動Tomcat服務,所以我唯一的選擇是使用JNI/JNA,而標準方式似乎有點複雜。現在我需要用C語言編寫一個複製文件的程序,對吧? –

+0

@YoussefSaih:看看我的編輯另一種方式... –

+0

謝謝,我發現這個解決方案在C#中,我不知道我可以在java中做到這一點[鏈接](http://stackoverflow.com/a/8271759/4810161) –

相關問題