通过身份验证将文件复制到java本地网络中的计算机

通过身份验证将文件复制到java本地网络中的计算机,java,windows,Java,Windows,我用Commons IO编写了一个程序,可以复制文件和其他东西。但我想将文件复制到本地ip地址\\10.x.x.x,但用户没有进行复制的权限,因此我需要输入ID和密码才能访问它。然而,我找不到一个方法,我可以做到这一点 要移动我使用的文件,请执行以下操作: FileUtils.moveFileToDirectory(fichier、destDir、true) 但我的目录类似于\\10.x.x.x\files,只有少数用户可以在该目录中写入,因此我有一个ID和密码,可以将文件移动到那里。我希望即使

我用Commons IO编写了一个程序,可以复制文件和其他东西。但我想将文件复制到本地ip地址
\\10.x.x.x
,但用户没有进行复制的权限,因此我需要输入ID和密码才能访问它。然而,我找不到一个方法,我可以做到这一点

要移动我使用的文件,请执行以下操作:

FileUtils.moveFileToDirectory(fichier、destDir、true)


但我的目录类似于
\\10.x.x.x\files
,只有少数用户可以在该目录中写入,因此我有一个ID和密码,可以将文件移动到那里。我希望即使用户没有将文件移动到该目录的权限,我的程序也可以这样做

Windows安全性的工作方式并非如此。如果您真的想这样做,则必须使用Java本机接口或Java本机访问,并设法从
Mpr.dll
调用函数(完成后不要忘记调用
WNetCancelConnection

但是您必须在程序中存储密码,这是一种糟糕的安全做法

实现这一点的标准方法是启动一个服务,该服务将在有权访问所需目录的用户下运行,并让您的程序使用您想要的任何方式与之通信,最简单的方法可能是TCP/IP。但是,除非您对此有特殊要求,否则我不建议将Jave用于此类程序

一个更Java的替代方案是在运行在有权访问目录的用户下的服务器机器上启动Tomcat服务。这样,您只需开发一个标准的JavaWeb应用程序,该应用程序能够上传文件,将文件保存到适当的目录中。但它将是一个传统的、可移植的Java应用程序,不需要JNI或JNA

如果不能使用Tomcat并且不想在其上投入太多,您可以将程序拆分为几个部分:

  • 一个客户端程序在目录(服务器机器上)上复制文件,每个人都有文件创建权限,如果不需要做更多的事情,或者可以轻松地用Java编写,则可以使用
    copy
    实用程序
  • 一个服务器程序,将在具有目标目录完全写入权限的用户的服务器计算机上运行。这个也可以很容易地用Java编写
  • 根据on ServerFault,您可以使用
    sc
    srvany
    在服务器计算机上轻松地将服务器程序作为服务安装

如果您使用客户机程序,您可以很容易地为每个复制的文件添加一个数字签名文件,但正如我前面所说的,这是一种很差的安全实践,并且几乎不会增加任何安全性。至少程序应该是可执行的,不可读的,并且源代码应该保持隐藏。最好记录复制文件的用户,并询问他们如果发现问题,会发生什么。

我无法启动Tomcat服务,因此我唯一的选择是使用JNI/JNA,标准方式似乎有点复杂。现在我需要用C编写一个程序来复制文件,对吗?谢谢,我在C#中找到了这个解决方案,我不确定用java能不能做到这一点