Java SFTP服务器多用户身份验证
我正在尝试扩展用户身份验证示例(也提供了该示例),以便多个用户可以登录到服务器。我还想为每个用户分配一个不同的主目录。到目前为止,我还没有找到由提供的任何此类实用程序,因此我使用提供的实用程序尝试了以下解决方法 我想做的是:Java SFTP服务器多用户身份验证,java,sftp,apache-mina,ftp-server,Java,Sftp,Apache Mina,Ftp Server,我正在尝试扩展用户身份验证示例(也提供了该示例),以便多个用户可以登录到服务器。我还想为每个用户分配一个不同的主目录。到目前为止,我还没有找到由提供的任何此类实用程序,因此我使用提供的实用程序尝试了以下解决方法 我想做的是: 创建UserManager对象以管理用户列表并将其信息存储在属性文件中,方法与 创建一个PasswordAuthenticator,在其身份验证方法中使用UserManager,如下所示: public class MyPasswordAuthenticator imple
public class MyPasswordAuthenticator implements PasswordAuthenticator {
private UserManager userManager;
public MyPasswordAuthenticator(){
this.userManager=null;
}
public MyPasswordAuthenticator(UserManager manager) {
this.userManager=manager;
}
@Override
public boolean authenticate(String username, String password, ServerSession session) throws PasswordChangeRequiredException {
if (this.userManager==null) return false;
User usr=null;
try {
usr = userManager.getUserByName(username);
} catch (FtpException e) {
e.printStackTrace();
}
if (usr==null) return false;
else{
String pass=usr.getPassword();
return password.equals(pass);
}
}
}
usr.getPassword()
返回null,即使a)属性文件中的密码字段有值b)我检查了函数getName()
和getHomeDirectory()
,它们返回各自的字符串值
我的问题是,为什么会发生这种情况,以及应该采取什么措施来解决这种情况?我找到了一种方法使其发挥作用,它是:
usr = this.userManager.authenticate(new UsernamePasswordAuthentication(username, password));
apachesshd中没有针对多用户服务器的
PasswordAuthenticator
的实际实现。你应该实现你自己的。这不是一个解决办法。它是实现的一部分。因此,您实际的问题是,为什么UserManager
接口的实现不起作用。但是没有向我们展示任何关于它的实现。实际上,你问的是两个完全无关的问题。把他们分成两个职位。或者决定您想问哪一个。您对实现的看法是正确的,我使用的是PropertiesUserManager
。我已经找到了问题所在,这个类在其getUserByName
函数中加载了User
的所有属性,除了密码之外。我会努力解决的,谢谢。我已经找到了一种方法,它是:usr=this.userManager.authenticate(新用户名密码验证(用户名、密码))代码>