-Страница должна предлагать как регистрацию, так и вход в систему (пользователь выбирает, что делать). Если они решат зарегистрироваться, они будут перенаправлены на страницу входа после введения информации (только имя, имя пользователя и пароль, одинаковые для входа и регистрации).
-В случае входа в систему приложению необходимо подсчитайте попытки входа в систему (до 2 неверных попыток), а затем покажите пользователю сообщение, сообщающее ему, что попыток больше нет, пока не пройдет 10 секунд. Это необходимо сделать с помощью файла cookie.
-Приложение должно проверить, находится ли пользователь, который регистрируется, уже в базе данных (поддельный, просто ArrayList).
-При успешном входе в систему , появится сообщение «Добро пожаловать».
-Пользователь также должен иметь возможность выйти из системы.
Это то, что у меня пока есть:
Код: Выделить всё
@WebServlet("/loginservlet")
public class LoginServlet extends HttpServlet {
private static final int ATTEMPTS_MAX = 2;
private static final Logger logger = Logger.getLogger(LoginServlet.class.getName());
ArrayList list = new ArrayList();
public LoginServlet() {
User u1 = new User("Alba", "alba01", "pass");
User u2 = new User("Maira", "maira01", "pass");
User u3 = new User("Carol", "carol01", "pass");
User u4 = new User("Debora", "debo01", "pass");
list.add(u1);
list.add(u2);
list.add(u3);
list.add(u4);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String task = request.getParameter("task");
if (task == null) {
response.sendRedirect("index.html");
return;
}
switch (task) {
case "formlog":
showFormLog(request,response);
break;
case "formreg":
showFormReg(request,response);
break;
case "register":
processReg(request,response);
break;
case "login":
processLog(request,response);
break;
case "default":
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid task");
break;
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
private void showFormLog(HttpServletRequest request, HttpServletResponse response) {
try {
RequestDispatcher dispatcher=null;
dispatcher=request.getRequestDispatcher("/formlog.jsp");
dispatcher.forward(request, response);
} catch (ServletException | IOException ex) {
logger.log(Level.SEVERE, "Error showing the log form", ex);
}
}
private void showFormReg(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
RequestDispatcher dispatcher = null;
dispatcher=request.getRequestDispatcher("/formreg.jsp");
dispatcher.forward(request, response);
} catch (ServletException ex) {
logger.log(Level.SEVERE, "Error showing the reg form", ex);
}
}
private void processReg(HttpServletRequest request, HttpServletResponse response) throws IOException {
String nameReg=request.getParameter("name");
String usernameReg=request.getParameter("username");
String passReg=request.getParameter("password");
if(nameReg !=null && usernameReg !=null && passReg !=null){
list.add(new User(nameReg, usernameReg, passReg));
response.sendRedirect("loginservlet?task=formlog");
}else{
response.sendRedirect("loginservlet?task=formreg");
}
}
private void processLog(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String nameLog=request.getParameter("name");
String usernameLog=request.getParameter("username");
String passLog=request.getParameter("password");
logger.info("Login attempt: name=" + nameLog + ", username=" + usernameLog);
if (nameLog == null || usernameLog == null || passLog == null) {
request.setAttribute("error", "All info required");
request.getRequestDispatcher("/formlog.jsp").forward(request, response);
return;
}
Cookie[] cookies = request.getCookies();
int failedAttempts= 0;
Cookie cookieAttempts = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("failedAttempts")) {
failedAttempts= Integer.parseInt(cookie.getValue());
cookieAttempts = cookie;
break;
}
}
}
if (failedAttempts>= ATTEMPTS_MAX) {
request.setAttribute("error", "Too many attempts. wait 10 seconds.");
RequestDispatcher dispatcher = request.getRequestDispatcher("/formlog.jsp");
dispatcher.forward(request, response);
return;
}
boolean correctLogin= false;
for (User user : list) {
if (user.getName().equals(nameLog) && user.getUsername().equals(usernameLog) && user.getPass().equals(passLog)) {
correctLogin= true;
break;
}
}
if (correctLogin) {
HttpSession session = request.getSession();
session.setAttribute("username", usernameLog);
if (cookieAttempts != null) {
cookieAttempts.setValue("0");
cookieAttempts.setMaxAge(0);
response.addCookie(cookieAttempts);
}
response.sendRedirect("welcome.jsp");
} else {failedAttempts++;
if (cookieAttempts== null) {
cookieAttempts= new Cookie("failedAttempts", String.valueOf(failedAttempts));
} else {
cookieAttempts.setValue(String.valueOf(failedAttempts));
}
cookieAttempts.setMaxAge(10);
response.addCookie(cookieAttempts);
request.setAttribute("error", "Incorrect user or pass. Intento " + failedAttempts+ " de " + ATTEMPTS_MAX);
RequestDispatcher dispatcher = request.getRequestDispatcher("/formlog.jsp");
dispatcher.forward(request, response);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... nd-cookies