Как проверить сервлет JSP, если пароль был введен три раза неправильно? - PullRequest
0 голосов
/ 03 марта 2020

В форме входа в систему как пользователь я должен предоставить следующие учетные данные:
- идентификатор клиента,
- идентификатор пользователя,
- пароль,

Это сервлет код для установки соединения с базой данных Oracle:

package com.mmdmanager;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

@WebServlet("/MaterialCreator")
public class MaterialCreator extends HttpServlet {
    long createdSessionTime;
    int enterWrongPassAttempts = 0;
    Connection connection;
    Statement statementCreation;
    ResultSet receivedPersonalData;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);

        String company_id = request.getParameter("client");
        String user_id = request.getParameter("userID");
        String acc_password = request.getParameter("userPassword");
        user_id = user_id.toUpperCase();

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "mmdmanager", "NHY67ujm");
            statementCreation = connection.createStatement();
            receivedPersonalData = statementCreation.executeQuery("SELECT * FROM USERS WHERE COMPANY_ID='" + Integer.valueOf(company_id) + "' " + "AND USER_ID='" + user_id + "' AND IS_ADMIN = 'N'");

            if ((receivedPersonalData.next() == true) && (receivedPersonalData.getString(8).equals(acc_password) == true)) {
                HttpSession httpSession = request.getSession();
                httpSession.setAttribute("user_id", user_id);
                httpSession.setAttribute("createdSessionTime", createdSessionTime);
                createdSessionTime = httpSession.getCreationTime();
                response.sendRedirect("MaterialCreator.jsp?name="+user_id.toLowerCase()+"?t="+createdSessionTime+"");
                System.out.println(receivedPersonalData.getString(8) + " | " + acc_password);
            }
            else if ((receivedPersonalData.next() == true) && (receivedPersonalData.getString(8).equals(acc_password) == false)) {
                enterWrongPassAttempts += 1;
                if (enterWrongPassAttempts == 3) {
                    response.sendRedirect("None");
                }
                System.out.println(receivedPersonalData.getString(8) + " | " + acc_password);
            }
            else {
                response.sendRedirect("http://localhost:8090/Login/index.jsp");
                System.out.println(receivedPersonalData.next());
            }

        }
        catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

Я хотел, чтобы сервлет проверил, если идентификатор компании и пользователь id указаны правильно, но оператор if:

else if ((receivedPersonalData.next() == true) && (receivedPersonalData.getString(8).equals(acc_password) == false))

не обнаруживает неверный пароль в случае, если другие данные верны, просто перейдите к последнему условию:

        else {
            response.sendRedirect("http://localhost:8090/Login/index.jsp");
            System.out.println(receivedPersonalData.next());
        }

Если у вас уже есть решение, поделитесь им со мной. :)

1 Ответ

1 голос
/ 03 марта 2020

Не комментируя слишком глубоко ужасы проверки вашего пароля (вам следует выяснить, что в дальнейшем, если это касается чего-то важного для удаленного использования), вы можете просто взять enterWrongPassAttempts и сохранить значение в сеансе.

request.getSession().setAttribute("NUMBER_ATTEMPTS", enterWrongPassAttempts);

Затем вы можете получить его:

Integer enterWrongPassAttempts = null;

enterWrongPassAttempts = request.getSession().getAttribute("NUMBER_ATTEMPTS");
if (enterWrongPassAttempts == null) {
    enterWrongPassAttempts = 0;
}

Использование сеанса сохранит значение в запросах.

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