【问题标题】:How recall method in Java [duplicate]Java中如何召回方法[重复]
【发布时间】:2020-05-14 19:00:34
【问题描述】:

如何在“LoginUser”类中调用“checkpassowrd”方法?(密码必须是字节[])我必须写其他信息才能发送问题,但我认为代码很清楚

头等舱

public final class Password {
protected void setPassword (byte[] pass) throws Exception{
    byte[] salt = generateSalt(12);
    byte[] input = appendArrays(pass, salt);
    clearArray(pass);
    saveBytes(salt, "salt.txt");
    saveBytes(input, "password.txt");
    clearArray(salt);
    clearArray(input);
}

protected boolean checkpassword(byte[] pass) throws Exception{
    byte[] salt = loadByte("salt.txt");
    byte[] input = appendArrays(pass, salt);
    clearArray(pass);
    byte[] pass_stored = loadByte("password.txt");
    boolean arraysEqual = Arrays.equals(input, pass_stored);
    clearArray(input);
    clearArray(pass_stored);
    return arraysEqual;
}

protected byte[] generateSalt(int n) {
    final Random r = new SecureRandom();
    byte[] salt = new byte[32];
    r.nextBytes(salt);
    return salt;
}

protected byte[] appendArrays(byte[]a, byte[]b) {
    byte[] result = new byte[a.length + b.length]; 
    System.arraycopy(a, 0, result, 0, a.length); 
    System.arraycopy(b, 0, result, a.length, b.length); 
    return result;
}

protected void clearArray(byte[]a) {
    for (int i = 0; i<a.length; i++) {
        a[i] = 0;
    }
}

protected void saveBytes(byte[]a, String path) {
    try (FileOutputStream db = new FileOutputStream("fullPathToFile")) {
        db.write(a);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

protected byte[] loadByte(String path) throws IOException {
    byte[] array = Files.readAllBytes(Paths.get("path"));
    return array;
}}

二等

public final class User { private String username; Password password; protected boolean valid; protected Password getPassword() {
    return password;
}

protected void setPassword(Password newPassword) {
    password = newPassword;
}

protected String getUsername() {
    return username;
}

protected void setUserName(String newUsername) {
    username = newUsername;
}

protected boolean isValid() {
    return valid;
}

protected void setValid(boolean newValid) {
    valid = newValid;
}

三等舱。我必须写其他信息才能发送问题,但我认为代码非常清晰

public final class LoginUser { 
    public User login(User user) {
        String username = user.getUsername();    
        Password password = user.getPassword();

        boolean verify = checkpassword(password);

        return user;
    }
}

【问题讨论】:

  • 您在 Password 实例上调用它,就像调用任何其他实例方法一样,您的代码中有多个示例。
  • 你可以创建一个User.checkPassword方法

标签: java arrays object casting


【解决方案1】:

由于 checkpassword() 是 Password 类中的一个实例方法,因此您需要一个 Password 实例来调用它。

在您的 LoginUser 类中,只需执行以下操作:

boolean verify = password.checkpassword(password);

或者,您也可以将 checkpassword() 设为静态,然后在 Password 类中调用它,如下所示:

protected static boolean checkpassword(byte[] pass) throws Exception{

然后这样称呼它:

boolean verify = Password.checkpassword(password);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多