В форме входа в систему как пользователь я должен предоставить следующие учетные данные:
- идентификатор клиента,
- идентификатор пользователя,
- пароль,
Это сервлет код для установки соединения с базой данных 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());
}
Если у вас уже есть решение, поделитесь им со мной. :)