我正在尝试扩展用户身份验证示例,该示例也显示为here,以便多个用户可以登录到服务器。我还想为每个用户分配一个不同的主目录。到目前为止,我无法找到Apache SSHD API提供的任何此类实用程序,因此我尝试使用Apache FtpServer提供的实用程序进行以下解决方法。
我尝试做的是:
创建一个PasswordAuthenticator,在其身份验证方法中使用UserManager,如下所示:
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()
并返回相应的字符串值。
我的问题是,为什么会发生这种情况以及应采取什么措施来解决这个问题?
答案 0 :(得分:1)
我找到了一种使其工作的方法,它是:
usr = this.userManager.authenticate(new UsernamePasswordAuthentication(username, password));