2013-06-13 2 views
1

괜찮습니다. 이제 사용자가 로그인 한 후 세션을 만들고 로그인 시도가 실패한 횟수가 3이되면 보안 질문으로 리디렉션하고 싶습니다. 어떻게 할 수 있습니까?로그인 페이지에 대한 세션 생성 및 로그인 실패 횟수 계산

사용자 로그인 및 로그 아웃 세션을 만드는 방법은 무엇입니까? 로그인 시도 횟수를 계산하는 방법은 무엇입니까?

protected void doPost(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = DriverManager.getConnection(
       "jdbc:mysql://localhost:3306/mutualfund", "root", ""); 
     Statement stmt = con.createStatement(); 

     String uname = request.getParameter("username"); 
     String pass = request.getParameter("password"); 
     String query = "SELECT * FROM `login_table` WHERE `username`=\""+uname +"\" and `password`=\""+pass+"\""; 

     ResultSet result = stmt.executeQuery(query);    

     if(result.next()) 
     { 
      System.out.println("entered into if loop"); 
      if (result.getString(1).equals(uname) 
        && result.getString(2).equals(pass)) { 
       System.out.println("Uname and pass are correct"); 
       if (result.getBoolean(7) == true) { 
        System.out.println("redirecting to admin profile"); 
        response.sendRedirect("displayFunds.jsp"); 
       } 
       else if ((result.getBoolean(7) == false) 
         && (result.getInt(3)==0)) { 
        System.out.println("first time login for customer, redirecting to change pass"); 

        response.sendRedirect("changePassword.jsp?name=" 
          + uname + "&&pass=" + pass); 

       } 
       else if ((result.getBoolean(7) == false) 
         && (result.getInt(3)==1)) { 
        System.out.println("active customer login"); 
        response.sendRedirect("custProfile.jsp"); 
       } 
      } 

      else { 

       response.sendRedirect("loginFailed.jsp"); 
      } 
     } 

    } catch (Exception ex) { 
     Logger.getLogger(Admin.class.getName()).log(Level.SEVERE, null, ex); 
    } 

} 
+1

세션 속성에 로그인 시도 횟수를 입력해야합니다. – NINCOMPOOP

+0

내가 말했듯이 나는 돈이별로 없거나 거의 아무것도 말할 수 없다. –

+0

유용한 추가 정보 : [세션 추적] (http://www.java-programming.info/tutorial/pdf/csajsp2/08-Session-Tracking.pdf) – informatik01

답변

1

먼저 로그인 시도에 저장할 세션 변수가 필요합니다. 당신이 로그인은 카운터 시도 숫자로 동일하고보기에 적절하게 요청을 전달하는 경우가 나타납니다 사용자 자격 증명의 유효성을 검사 한 후 다음

// Do not create session if it doesn't exist 
HttpSession session = request.getSession(false); 
int loginAttempts=0; 
try{ 
    loginAttempts = Integer.parseInt(session.getAttribute("LOGIN_ATTEMPTS").toString()); 
    loginAttempts++; //if code comes here then the user has already made a login attempt and therefore icrease the counter 
}catch(Exception ex){ 
    //if error then that means that the user has never made a login attempt because the attribute was not found 
    session.setAttribute("LOGIN_ATTEMPTS",1); 
} 

: 그래서 당신의 doGet()의 첫 번째 줄은 다음과 같이해야합니다 네가 원해.

+0

그러면 다른 로그인 자격 증명에 대해 동일한 수를 증가시키지 않습니다. ? user1이 처음 시도하고 두 번째로 사용자 2가 시도하면 카운트는 2가됩니까? –

+1

@APPUcool 아니요, 2가 아닙니다.'loginAttempts'는 ** 로컬 변수 **로 선언됩니다. 위 코드가 선언 된 모든 메소드 호출에 대해 loginAttempts가 다시 생성되어 0으로 초기화됩니다. 다시 말하지만 ** 정적 변수가 아닙니다 ** (Java 로컬 변수에서는 정적이 될 수 없습니다) 따라서 이전 값을 보존하지 않습니다. 메서드, 생성자 또는 블록이 입력되면 로컬 변수가 만들어지고 변수가 메서드, 생성자 또는 블록을 벗어나면 변수가 삭제됩니다. 여기를 읽으십시오 : [Java Variable Types] (http://www.tutorialspot.com/java/java_variable_types.htm) – informatik01

+0

예, 위의 코드를 doget에 입력하면 세션을 dopost의 속성으로 인식하지 못합니다. 이 코드 조각을 dopost에 쓰면 LOGIN_ATTEMPT id는 항상 1과 같습니다. 서블릿이 매번 로그인하려고 할 때마다 (다시) LOGIN_ATTEMPTS가 매번 1로 설정되고 새 세션이 매회 생성됩니다. ( –