У меня есть веб-проект на 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?