[英]How to determine who uploaded file to ftp in java?
我有一个ftp客户端,允许用户上传文件。 我想确定哪个用户/主机/ ...上传了该文件。所有使用相同用户名的人都上传了文件。唯一的区别是他们使用不同的计算机。
有什么办法可以跟踪哪个用户上传了该文件?
public static void uploadFileToServerViaSunFtp(final String source,final JPanel panel, final JTextArea textArea)
{
SwingWorker uploadWorker = new SwingWorker<Boolean,String>()
{
@Override
protected Boolean doInBackground() throws Exception
{
publish("File "+FilenameUtils.getName(source).concat(" starts uploading on ") + String.valueOf(Calendar.getInstance().getTime() + "\n"));
boolean success = false;
FtpClient client;
try
{
client = new FtpClient(server.getFtpServer());
client.login(server.getUsername(), server.getPassword());
client.cd("PC");
client.binary();
int BUFFER_SIZE = 10240;
byte[] buffer = new byte[BUFFER_SIZE];
File f = new File(source);
FileInputStream in = new FileInputStream(source);
// *** If uploading take long time, progress bar will show up ***
InputStream inputStream = new BufferedInputStream(
new ProgressMonitorInputStream(panel, "Uploading " + f.getName(), in));
OutputStream out = client.put(f.getName());
while (true) {
int bytes = inputStream.read(buffer);
if (bytes < 0)
break;
out.write(buffer, 0, bytes);
}
out.close();
in.close();
inputStream.close();
client.closeServer();
success = true;
}
catch (IOException e)
{
OeExceptionDialog.show(e);
}
return success;
}
@Override
protected void done()
{
super.done();
try {
if(get())
textArea.append("File "+FilenameUtils.getName(source).concat(" Uploaded successfully.\n"));
}
};
uploadWorker.execute();
}
FTP服务器上存储的文件具有所有者( oid
)和组( gid
)。
登录FTP服务器的目的是使您同时经过身份验证和授权。 因此,对于将要上传文件的每个用户,您应该具有“不同用户名”中的不同用户。
为所有用户使用相同的用户名是没有意义的,因为这将导致无法区分。
检查IP地址是完全没有意义的。 我之所以这样说,是因为任何人都可以在您的本地网络上劫持IP地址。 这里几乎没有验证,您不能相信您的本地DNS为您完成这项工作。
只需使用不同的用户名。
您的客户端代码与该问题有什么关系? 当然,服务器会知道上传文件之前登录的用户名以及建立IP地址的连接(除非IP地址被代理/ NAT屏蔽)。 此外,上载文件的属性通常设置为在Unix上具有所有者和组,在Windows上具有与上载文件的用户的所有者和组相对应的安全属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.