Если блок не выполняется должным образом - PullRequest
0 голосов
/ 09 июня 2018

У меня есть веб-проект на Java, где у меня есть метод проверки пользователя, когда он вошел в систему. Я создал службу шифрования паролей, чтобы проверить, скорее его пароль верный или нет.

    String email = request.getParameter("email");
    String password = request.getParameter("password");


    try {
        byte[] salt = LogicFacade.getSalt(email);

        byte[] attemptedPassword = LogicFacade.getEncryptedPassword(email);

        if (LogicFacade.authenticate(password, attempted password, salt))
//Here salt is null, whenever I try to log in, with a wrong username or password
 {
            User user = null;
            user = LogicFacade.login(email, password);
            HttpSession session = request.getSession();
            session.setAttribute("user", user);
            session.setAttribute("role", user.getRole());
            return user.getRole() + "page";
        } else {
            String errorMessage = "the username or password you have selected does not exist";
            throw new LoginSampleException(errorMessage);
        }

    } catch (NoSuchAlgorithmException | InvalidKeySpecException | LoginSampleException ex ) {
        String errorMessage = "We have an internal problem, but we are working as hard as possible, to solve it.";
        Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        throw new LoginSampleException(errorMessage);
    }
}

}

Всякий раз, когда я ввожу неправильное имя пользователя или пароль, он говорит, что параметр Salt должен быть ненулевым.

Это потому, что у меня есть метод дляполучить соль от пользователя из базы данных SQL, которая затем возвращает ноль.

Вот мой метод аутентификации:

  public boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException, LoginSampleException {
        // Encrypt the clear-text password using the same salt that was used to
        // encrypt the original password
        byte[] encryptedAttemptedPassword = getEncryptedPassword(attemptedPassword, salt);

        // Authentication succeeds if encrypted password that the user entered
        // is equal to the stored hash
        return Arrays.equals(encryptedPassword, encryptedAttemptedPassword);
    }

Мой вопрос заключается в том, почему он не выполняет блок else после того, как условие if не выполнено.Всякий раз, когда я отлаживаю проект, он сразу переходит к классу потока после того, как я пытаюсь копаться в методе?

Возможно ли, что он может войти в блок else и не сразу вызвать исключение NullPointerException?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Измените условие if на

if (salt!=null && LogicFacade.authenticate(password, attempted password, salt)){
...if-block
} else {
...else-block
}

Поскольку солт-ноль означает, что адрес электронной почты не существует в вашей базе данных.

0 голосов
/ 09 июня 2018

Это потому, что ваш блок if находится внутри блока try, когда выдается исключение, управление переходит к блоку перехвата, а затем программа выходит из режима

Чтобы исправить эту ошибку, вы можете просто проверить

if(salt==null)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...