2015-04-27 42 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) –

相关问题