public class AuthenticationExample {
public static class WrongLoginException extends Exception {
public WrongLoginException() {
super("Wrong login");
}
public WrongLoginException(String message) {
super(message);
}
}
public static class WrongPasswordException extends Exception {
public WrongPasswordException() {
super("Wrong password");
}
public WrongPasswordException(String message) {
super(message);
}
}
public static boolean validate(String login, String password, String confirmPassword) {
try {
if (!login.matches("[A-Za-z0-9_]+") || login.length() >= 20) {
throw new WrongLoginException();
}
if (!password.matches("[A-Za-z0-9_]+") || password.length() >= 20 || !password.equals(confirmPassword)) {
throw new WrongPasswordException();
}
return true;
} catch (WrongLoginException | WrongPasswordException e) {
System.err.println(e.getMessage());
return false;
}
}
public static void main(String[] args) {
String login = "user123";
String password = "pass123";
String confirmPassword = "pass123";
if (validate(login, password, confirmPassword)) {
System.out.println("Registration successful.");
} else {
System.out.println("Registration failed.");
}
}
}
public static boolean foo(String login, String password, String passwordConfirm) {
Pattern regex = Pattern.compile("[^a-zA-Z0-9_]");
boolean[] loginError = {false};
boolean[] passwordError = {false};
Thread loginThread = new Thread(() -> {
if (regex.matcher(login).find() || login.length() >= 20) {
System.err.println("WrongLoginException");
loginError[0] = true;
}
});
loginThread.start();
Thread passwordThread = new Thread(() -> {
if (regex.matcher(password).find() || password.length() >= 20 || password != passwordConfirm) {
System.err.println("WrongPasswordException");
passwordError[0] = true;
}
});
passwordThread.start();
try {
loginThread.join();
passwordThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return !(loginError[0] || passwordError[0]);
}
}
password и confirmPassword. Login должен содержать только латинские буквы, цифры
и знак подчеркивания. Длина login должна быть меньше 20 символов. Если login не
соответствует этим требованиям, необходимо выбросить WrongLoginException.
Password должен содержать только латинские буквы, цифры и знак подчеркивания.
Длина password должна быть меньше 20 символов. Также password и
confirmPassword должны быть равны. Если password не соответствует этим
требованиям, необходимо выбросить
WrongPasswordException. WrongPasswordException и WrongLoginException -
пользовательские классы исключения с двумя конструкторами – один по умолчанию,
второй принимает сообщение исключения и передает его в конструктор класса
Exception. Обработка исключений проводится внутри метода. Используем multi-catch
block. Метод возвращает true, если значения верны или false в другом случае.
(Задание с урока)
2. Интернет-магазин. Аутентификация пользователя:
Пусть у вас будет отображение, содержащие пары логин-пользователь. Если
пользователь ввел данные из этого отображения, он аутентифицирован. Если
введенные логин, пароль не содержатся в отображении, проверяете их корректность
(задание 1).