Как перенаправить пользователя на другую страницу JSP, в случае неверных учетных данных - PullRequest
0 голосов
/ 03 марта 2019

Я создаю форму входа для веб-приложения Java.У меня есть пользователь, входящий в систему с правильным паролем, правильным с помощью Java-сервлета, но я хочу перенаправить пользователя на другую страницу JSP, если он введет неправильный пароль.Моя первая идея - создать оператор try / catch.Тем не менее, я получаю пустые страницы, когда я пытаюсь это сделать.Как я могу убедиться, что пользователь знает, когда он ввел неправильный пароль?Спасибо

public class Loginn extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    try (PrintWriter out = response.getWriter()) {
        String name = request.getParameter("name");
        String pass = request.getParameter("pass");
        MyDb1 db = new MyDb1();
      Connection con = db.getCon();
      Statement stmt = con.createStatement();
     ResultSet rs = stmt.executeQuery("select uid,name,pass from register where email = '"+name+"' and  pass = '"+pass+"'");

     while ((rs.next())) {

        String uid = rs.getString("uid");

          HttpSession session=request.getSession();  
          session.setAttribute("name",uid);
          response.sendRedirect("http://localhost:8080/Final_Year_Project_5_/userprofile.jsp");  

} 


} catch (SQLException ex) {
        Logger.getLogger(Loginn.class.getName()).log(Level.SEVERE, null, ex);

    }

}

Ответы [ 2 ]

0 голосов
/ 03 марта 2019
  1. ВАШ КОД - УТЕЧКА БЕЗОПАСНОСТИ .Представьте, что я вставил в веб-форму в поле pass:

    whatever' OR TRUE;--
    

Я бы вошел в систему (просто вставьте эту строку в ваш запрос и распечатайте ее, посмотрите, чтоэто будет делать ...

Вам нужно использовать PreparedStatement, заменить все переменные на вопросительные знаки.

У ВАШЕГО КОДА УТЕЧКА ПАМЯТИ .Connection и Statement и ResultSets - все ресурсы;им нужно явное закрытие.Узнайте о том, как использовать «try-with-resources» в java.

JSP - устаревшая технология, и ваша обработка исключений оставляет соединение плавающим.Вместо этого я предлагаю сделать: throw new ServletException(ex), по крайней мере, тогда вы выполняете обработку ошибок в нужном месте (контейнер сервлета).

Пустые страницы, вероятно, связаны с тем, как вы обрабатываете исключения (вы их регистрируете, а затемничего не делать, в результате чего пустая страница).Исправьте это, и теперь у вас есть фактическая ошибка, на которую вы можете посмотреть.

0 голосов
/ 03 марта 2019

Попробуйте использовать if и else,

public class Loginn extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            String name = request.getParameter("name");
            String pass = request.getParameter("pass");
            MyDb1 db = new MyDb1();
            Connection con = db.getCon();

            PreparedStatement ps = c.prepareStatement("select uid,name,pass from register where email = ? and  pass = ?");
            ps.setString(1, un);
            ps.setString(2, pw);

            ResultSet rs = ps.executeQuery();

            if (rs.next()) {

              String uid = rs.getString("uid");

              HttpSession session=request.getSession();  
              session.setAttribute("name", uid);


              response.sendRedirect("userprofile.jsp");  // No need to add whole URL unless this is in another Folder.
            } else {
              response.sendRedirect("error.jsp");
            }

    } catch (SQLException ex) {
            Logger.getLogger(Loginn.class.getName()).log(Level.SEVERE, null, ex);
    }
...