【问题标题】:How to redirect user to another JSP page, In case of incorrect credentials如果凭据不正确,如何将用户重定向到另一个 JSP 页面
【发布时间】:2019-03-03 14:57:56
【问题描述】:

我正在为 Java Web 应用程序创建登录表单。我让用户通过 java servlet 使用正确的密码登录,但如果用户输入错误的密码,我想将用户重定向到另一个 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);

    }

}

【问题讨论】:

    标签: java servlets error-handling


    【解决方案1】:
    1. 您的代码存在安全漏洞。想象一下,我在 pass 字段中输入了 web 表单:

      whatever' OR TRUE;--
      

    我会登录(只需将该字符串放入您的查询中并打印出来,看看它会做什么......

    您需要使用PreparedStatement,将所有变量替换为问号。

    1. 您的代码有内存泄漏。 Connection 和 Statement 和 ResultSets 都是资源;他们需要明确的关闭。谷歌搜索如何在 java 中使用“try-with-resources”。

    JSP 是过时的技术,您的异常处理会使连接处于浮动状态。我建议这样做:throw new ServletException(ex),至少你在正确的地方(servlet 容器)进行错误处理。

    空白页可能是由于您处理异常的方式(您记录它们然后什么都不做,导致空白页)。修复此问题,现在您可以查看实际错误。

    【讨论】:

      【解决方案2】:

      尝试使用ifelse

      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);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        • 2013-02-18
        • 2014-06-24
        • 1970-01-01
        • 2012-04-05
        相关资源
        最近更新 更多