Java 如何在登录页面中使登录错误(“错误的用户名/密码”)更具体
我正在使用JDBC、servlet和JSP创建一个登录页面。我的问题是,我不知道如何使登录错误更具体。例如,如果用户输入了错误的用户名,则会显示“错误的用户名”。如果用户输入错误的密码,则会显示“错误的密码” 我只能做“错误的用户名/密码” 这是我的密码:Java 如何在登录页面中使登录错误(“错误的用户名/密码”)更具体,java,jsp,servlets,jdbc,Java,Jsp,Servlets,Jdbc,我正在使用JDBC、servlet和JSP创建一个登录页面。我的问题是,我不知道如何使登录错误更具体。例如,如果用户输入了错误的用户名,则会显示“错误的用户名”。如果用户输入错误的密码,则会显示“错误的密码” 我只能做“错误的用户名/密码” 这是我的密码: if(loginButton){ String queryStr = "SELECT * FROM accounts WHERE username=? AND password=?";
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);
}
}
希望这有帮助 在您的
中,如果
,您可以按以下方式进行更改以实现此目的:
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);
}
}
希望这有帮助 您不想让错误消息比这更具体。你最不想做的事情就是向试图破解你的应用程序的未经授权用户提供线索。@MarsAtomic别担心,我永远不会这么做。这只是一个项目,您不想让错误消息更具体。你最不想做的事情就是向试图破解你的应用程序的未经授权用户提供线索。@MarsAtomic别担心,我永远不会这么做。这只是一个项目,你不应该这样做。这会泄露有关用户名存在的信息。@MarkRotteveel如果我创建了一个有登录页的网站,我不打算这样做。这只是一个项目的一部分,你不应该这样做。这会泄露有关用户名存在的信息。@MarkRotteveel如果我创建了一个有登录页的网站,我不打算这样做。这只是一个项目的一部分。