Форма входа и регистрации на одной странице в сервлете
Я сохранил электронную почту, dob, имя и фамилию в базе данных. Теперь я хочу сделать создание пароля. На странице входа в систему в первый раз пользователь должен создать пароль, и он должен храниться в БД. Опять же, если тот же пользователь входит в систему с правильными учетными данными, он должен перенаправиться на целевую страницу. Но в конце шрифта есть только два поля: одно-электронная почта, а другое-пароль.
Что я уже пробовал:
Я пробовал этот код сервлета, но не понял, куда поместить значение insert для первого хранилища паролей.
package admin.com; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.sql.*; import javax.servlet.http.HttpSession; public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 102831973239L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); String email = request.getParameter("useremail"); String password = request.getParameter("password"); String searchQuery = "select * from login where email='" + email + "' AND password='" + password + "'" ; try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); } try { Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "root", "" + "" + "" + ""); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(searchQuery); // out.println("email: "+email); // out.println("password: "+password); // out.println("type: "+type); // out.println("type: "); boolean isEmpty = rs.next(); // out.println("type: " + type); if (!isEmpty) { // redirect to error page // System.out.println("<font color=red>invalid user name or password</font>"); //request.getSession().removeAttribute("errorMessage"); // System.out.println("Invalid Credentials"); response.sendRedirect("index.jsp"); request.setAttribute("error","Invalid Username or Password"); } else if (isEmpty) { // fetch the session from request, create new session if session // is not present in the request HttpSession session = request.getSession(true); session.setAttribute("FirstName", rs.getString("first_name")); session.setAttribute("LastName", rs.getString("last_name")); session.setAttribute("employee_id", rs.getString("employee_id")); // session.setAttribute("Type", rs.getString("type")); // redirect to success page // session.setMaxInactiveInterval(50); // *600 secs = 10 mins *// // if(rs.next()){ // stype t1=new type(); String user_type = rs.getString("user_type"); // String type= rs.getString("type"); // out.println("type: " + type); if ("admin".equals(user_type)) { // redirect to buyer page response.sendRedirect("Landing.jsp"); } else if ("emp".equals(user_type)) { // redirect to seller page response.sendRedirect("error.jsp"); request.setAttribute("error","Invalid Username or Password"); } // } } } catch (SQLException e) { System.out.println("SQLException occured: " + e.getMessage()); e.printStackTrace(); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Richard MacCutchan
Если пользователь пытается войти в систему и учетные данные не могут быть найдены в базе данных, то они понадобятся вам для регистрации. Обычно это означает направление их на другую страницу, чтобы ввести свои данные.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Richard Deeming
И НИКОГДА храните пароли в виде обычного текста.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]