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

标签 java windows

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

要移动文件,我使用:

FileUtils.moveFileToDirectory(fic​​hier, destDir,true);

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

最佳答案

这实际上不是 Windows 安全的工作方式。如果您确实想这样做,则必须使用 Java Native Interface 或 Java Native Access,并设法调用 WNetAddConnection来自 Mpr.dll 的函数(完成后不要忘记调用 WNetCancelConnection)。

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

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

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

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

  • 一个客户端程序,用于复制目录(在服务器计算机上)上的文件,并为每个人提供文件创建权限 - 如果无需执行任何其他操作,则可以退化为复制实用程序已完成或可以轻松地用 Java 编写
  • 一个服务器程序,将在对目标目录具有完全写入权限的用户下在服务器计算机上运行。这个也可以很容易地用 Java 编写
  • 您可以根据this answer使用scsrvany轻松地将服务器程序作为服务安装在服务器计算机上。关于服务器故障

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

关于java - 使用 java 将文件复制到本地网络中的计算机并进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889985/

相关文章:

java - gradle 的奇怪 junit4 行为

Java拦截HTTP请求

c# - 在 C# 中从 Windows 服务捕获关键事件

c - C 中的内存管理(分配)

c++ - 如何隐藏控制台窗口并调出启动画面?

java - org.w3c.dom.Document 和 org.dom4j.Document 之间的区别

java - android套接字等待传入数据的指定时间

java - java中处理确认对话框

c - Windows 上的 %lld 问题

c++ - 你能在事件处理程序中使用 wxMutex 吗?