2015-04-26 59 views
3

当用户未能提供正确的凭证3次时,我必须禁用“用户名”&“密码”文本框。我应该使用JSP本身的逻辑(使用jQuery或JavaScript)或在控制器中使用。3次登录尝试失败时禁用文本框

PS:我必须在失败后重定向到登录页面。只需要更新错误消息“您的帐户已被禁用”。

下面是JSP:Login.jsp页面

 <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Login Form</title> 
    </head> 
    <body> 
     <form action="Login_Servlet_Test" method="POST"> 
      Username <input type="text" name="uname"/><br> 
      Password <input type="text" name="paswd"/><br> 
      <input type="Submit" value="Submit"/> 
     </form> 

    </body> 
</html> 

下面是Servlet:LoginServlet

public class LoginServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


    public void init() throws ServletException { 
     //we can create DB connection resource here and set it to Servlet context 
     if(getServletContext().getInitParameter("dbURL").equals("jdbc:mysql://localhost/mysql_db") && 
       getServletContext().getInitParameter("dbUser").equals("mysql_user") && 
       getServletContext().getInitParameter("dbUserPwd").equals("mysql_pwd")) 
     getServletContext().setAttribute("DB_Success", "True"); 
     else throw new ServletException("DB Connection error"); 
    } 


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     //get request parameters for userID and password 
     String user = request.getParameter("user"); 
     String pwd = request.getParameter("pwd"); 

     //get servlet config init params 
     String userID = getServletConfig().getInitParameter("user"); 
     String password = getServletConfig().getInitParameter("password"); 
     //logging example 
     log("User="+user+"::password="+pwd); 

     if(userID.equals(user) && password.equals(pwd)){ 
      response.sendRedirect("LoginSuccess.jsp"); 
     }else{ 
      RequestDispatcher rd = getServletContext().getRequestDispatcher("Login.jsp"); 
      PrintWriter out= response.getWriter(); 
      out.println("<font color=red>Either user name or password is wrong.</font>"); 
      rd.include(request, response); 

     } 

    } 

} 
+0

@Archana您将需要使用JavaScript相同,保持跟踪登录尝试在这里.. –

+1

锁定的用户应该被标记在数据库中, 客户端处理很容易删除。 向用户模型添加登录计数器并在失败后进行更新,成功登录应重置计数器。 另一个字段应该是表示用户上次尝试登录的日期。如果这个领域大于X小时,你应该重置计数器以及 – navotgil

+0

@navotgil良好的投入.. !!! –

回答

1

你会在你的用户表中添加两列。一个表示登录计数,另一个表示上次登录尝试的时间戳。 大多数网站允许用户在帐户锁定后的特定时间后尝试登录。因此,如果指定的时间(例如上次登录尝试后的30分钟)超出或用户能够成功登录,则可能需要检查时间并清除不成功的尝试。

PreparedStatement pstmt = con.prepareStatement("select loginCount , loginAttemptDate from userstable where username=?"); 
pstmt.setString(1,username);//your username from login page 
ResultSet rs = pstmt.executeQuery(); 
int loginAttempt=resultset.getint(1); 
Date loginAttemptDate = new java.util.Date(resultSet.getTimestamp(2).get time()); 
request.setAttribute("loginCount",loginAttempt); 
long diff= new Date().getTime() - loginAttemptDate.getTime(); 

if (diff < YOURTIMELIMITCONST && loginAttempt > 3){ 


RequestDispatcher rd = getServletContext().getRequestDispatcher("Login.jsp"); 
PrintWriter out= response.getWriter(); 
out.println("<font color=red>Either user name or password is wrong.</font>"); 
     rd.include(request, response); 
}else{ 
    //do your login check 
} 

,并在JSP中你用小脚本

<%if((Integer)request.getAttribute("loginCount") > 3){%> 
document.getElementById("usernamebox").disabled = true; 
document.getElementById("passwordbox").disabled = true; 
<%}%> 

像我假定你的输入框的ID在上面的代码

+0

@Archna已经添加了一些jdbc部分,只是作为例子根据您的数据库和表格进行更改.. –

+0

非常感谢。伟大的帮助:) – Archna