Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SFTP服务器多用户身份验证_Java_Sftp_Apache Mina_Ftp Server - Fatal编程技术网

Java SFTP服务器多用户身份验证

Java SFTP服务器多用户身份验证,java,sftp,apache-mina,ftp-server,Java,Sftp,Apache Mina,Ftp Server,我正在尝试扩展用户身份验证示例(也提供了该示例),以便多个用户可以登录到服务器。我还想为每个用户分配一个不同的主目录。到目前为止,我还没有找到由提供的任何此类实用程序,因此我使用提供的实用程序尝试了以下解决方法 我想做的是: 创建UserManager对象以管理用户列表并将其信息存储在属性文件中,方法与 创建一个PasswordAuthenticator,在其身份验证方法中使用UserManager,如下所示: public class MyPasswordAuthenticator imple

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

我想做的是:

  • 创建UserManager对象以管理用户列表并将其信息存储在属性文件中,方法与
  • 创建一个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()
    ,它们返回各自的字符串值


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

    我找到了一种方法使其发挥作用,它是:

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

    apachesshd中没有针对多用户服务器的
    PasswordAuthenticator
    的实际实现。你应该实现你自己的。这不是一个解决办法。它是实现的一部分。因此,您实际的问题是,为什么
    UserManager
    接口的实现不起作用。但是没有向我们展示任何关于它的实现。实际上,你问的是两个完全无关的问题。把他们分成两个职位。或者决定您想问哪一个。您对实现的看法是正确的,我使用的是
    PropertiesUserManager
    。我已经找到了问题所在,这个类在其
    getUserByName
    函数中加载了
    User
    的所有属性,除了密码之外。我会努力解决的,谢谢。我已经找到了一种方法,它是:
    usr=this.userManager.authenticate(新用户名密码验证(用户名、密码))