SFTP服务器多用户身份验证

时间:2016-03-10 08:59:14

标签: java sftp apache-mina ftp-server

我正在尝试扩展用户身份验证示例,该示例也显示为here,以便多个用户可以登录到服务器。我还想为每个用户分配一个不同的主目录。到目前为止,我无法找到Apache SSHD API提供的任何此类实用程序,因此我尝试使用Apache FtpServer提供的实用程序进行以下解决方法。

我尝试做的是:

  1. 创建一个UserManager对象来管理用户列表并将其信息存储在属性文件中,方式类似于this example
  2. 创建一个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);
            }
        }
    
    
    }
    
  3. 但是,usr.getPassword()返回null,即使a)属性文件中的密码字段确实有值b)我已检查函数getName()getHomeDirectory()并返回相应的字符串值。

    我的问题是,为什么会发生这种情况以及应采取什么措施来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我找到了一种使其工作的方法,它是:

usr = this.userManager.authenticate(new UsernamePasswordAuthentication(username, password));