java - 如何使登录错误 ("Wrong username/password")在登录页面中更加具体

标签 java jsp servlets jdbc

我正在使用 JDBC、servlet 和 JSP 创建一个登录页面。我的问题是,我不知道如何使登录错误更具体。例如,如果用户输入了错误的用户名,则会显示“错误的用户名”。如果用户输入的密码错误,则会显示“密码错误”

我只能做“错误的用户名/密码”

这是我的代码:

if(loginButton){
                    String queryStr = "SELECT * FROM accounts WHERE username=? AND password=?";
                    PreparedStatement ps = conn.prepareStatement(queryStr);
                    String usernameInput= request.getParameter("usernameInput");
                    String passwordInput=request.getParameter("passwordInput");
                    String passwordEnc= encrypt(passwordInput);

                    ps.setString(1, usernameInput);
                    ps.setString(2, passwordEnc);

                    ResultSet rs = ps.executeQuery();


                    if(rs.next() && captcha.isCorrect(answer)){
                        if(rs.getString("role").equals("Admin")){
                            request.setAttribute("role", rs.getString("role"));
                            request.setAttribute("username", rs.getString("username"));
                            RequestDispatcher view = request.getRequestDispatcher("adminAccess.jsp");
                            view.forward(request, response);

                        }

                        else{
                            request.setAttribute("role", rs.getString("role"));
                            request.setAttribute("username", rs.getString("username"));
                            RequestDispatcher view = request.getRequestDispatcher("loginResult.jsp");
                            view.forward(request, response);
                        }

                   //response.sendRedirect("loginResult.jsp");

                    }else if(!captcha.isCorrect(answer)) {
                            request.setAttribute("captchaMismatch","Captcha does not match");
                            request.getRequestDispatcher("index.jsp").forward(request, response);

                        }
                    else if(!rs.next()){
                            request.setAttribute("loginError","Wrong username/password!");
                            request.getRequestDispatcher("index.jsp").forward(request, response);
                        }

                }

最佳答案

在您的 else-if 中,您可以像下面这样进行更改来实现:

                  else if(!captcha.isCorrect(answer)) {
                            request.setAttribute("captchaMismatch","Captcha does not match");
                            request.getRequestDispatcher("index.jsp").forward(request, response);

                        }
                  else {
                        String sql1 = "SELECT password FROM accounts WHERE username=?";//getting username
            PreparedStatement ps=con.prepareStatement(sql1);
            ps.setString(1,usernameInput);

            ResultSet rs = ps.executeQuery();
               //if row exist means username there in table
              if(rs.next())
                {
                    //getting password
                    String pass = rs.getString("password");
                    //checking if pass is not equal
                  if(!pass.equals(passwordEnc)){
                            request.setAttribute("loginError","Wrong password!");
                            request.getRequestDispatcher("index.jsp").forward(request, response);
                        }
                      }else{

                        request.setAttribute("loginError","Wrong username");
                            request.getRequestDispatcher("index.jsp").forward(request, response);
                     }

             }

希望这有帮助!

关于java - 如何使登录错误 ("Wrong username/password")在登录页面中更加具体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55931781/

相关文章:

java - 如何让 Play 框架应用程序在执行 Controller CRUD API 方法之前运行 SQL 脚本?

java - 我无法更改 Cordova JAVA_HOME 值

javascript - 如何在页面加载后立即调用 JavaScript 方法

java - 从 JSP 发送文件到 Servlet

java - JAVA中的 hibernate 线程

java - 有没有什么方法可以访问子类型方法而不使用泛型进行强制转换

java - 将用户输入写入 XML 文件

java - 设置随机数函数的下限

java - 将 jpeg 图像发送到 Servlet 并将其转换为 BufferedImage

java - java servlet 中多个线程访问的变量是否需要声明为 volatile?