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

时间:2015-04-27 07:47:08

标签: java windows

我使用Commons IO编写了一个复制文件和其他东西的程序。但我想将文件复制到本地IP地址\\10.x.x.x,但用户没有权利进行复制,因此我需要输入ID和密码才能访问它。但是我无法找到一种方法。

要移动我使用的文件:

FileUtils.moveFileToDirectory(fichier, destDir,true);

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

1 个答案:

答案 0 :(得分:1)

确实是Windows安全的工作方式。如果你真的想这样做,你将不得不使用Java Native Interface或Java Native Access,并设法从Mpr.dll调用WNetAddConnection函数(并且不要忘记调用{{1}完成后。)

但是您必须在程序中存储密码,这是一种很差的安全措施。

执行此操作的标准方法是启动一个服务,该服务将在可以访问所需目录的用户下运行,并让您的程序使用您想要的任何内容与其进行通信,最简单的方法可能是TCP / IP 。但除非你有特殊要求,否则我不建议将Jave用于那些类型的程序。

更多Java替代方案是在有权访问该目录的用户下运行的服务器计算机上启动Tomcat服务。这样您就必须开发一个标准的Java Web应用程序,它能够上传将文件保存到正确目录的文件。但它将是一个传统的,可移植的Java应用程序,不需要JNI和JNA。

如果无法使用Tomcat并且不想对其投入太多,可以将程序分成几部分:

  • 一个客户端程序使用文件创建权限为每个人复制目录(在服务器计算机上)上的文件 - 如果不需要做任何事情,可以衰减到WNetCancelConnection实用程序,或者可以易于用Java编写
  • 将在服务器计算机上运行的一个服务器程序,该用户对目标目录具有完全写入权限。这个也可以用Java轻松编写
  • 根据ServerFault上的this answer
  • ,您可以轻松地在服务器计算机上将服务器程序作为服务安装copysc

如果您使用客户端程序,则可以轻松地为每个复制的文件添加数字签名文件,但正如我上面所说,这是一种糟糕的安全措施,并且几乎没有任何安全性。至少该程序应该是可执行的并且不可读,并且源应该保持隐藏。最好记录复制文件的用户,并询问他们发现问题的原因。