首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在3次登录尝试失败时禁用文本框

问在3次登录尝试失败时禁用文本框
EN

Stack Overflow用户
提问于 2015-04-26 10:34:41
回答 1查看 2K关注 0票数 3

当用户3次未能提供正确的凭据时,我必须禁用“用户名”和“密码”文本框。我应该在JSP本身(使用jQuery或javascript)或控制器中使用该逻辑。

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

下面是JSP: Login.jsp

代码语言:javascript
复制
        <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

代码语言:javascript
复制
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);

        }

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-26 11:00:59

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

代码语言:javascript
复制
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中,您确实喜欢使用scriptlet。

代码语言:javascript
复制
<%if((Integer)request.getAttribute("loginCount") > 3){%>
document.getElementById("usernamebox").disabled = true;
document.getElementById("passwordbox").disabled = true;
<%}%>

我在上面的代码中假设了输入框的ids。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29876525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档