2012-06-13 2 views
0

사용자가 사용자 이름 &을 입력하면 입력이 사용자 테이블의 일부 행과 일치하는지 확인하여 인증을 수행하고 싶습니다. 지금까지 코드는 다음과 같습니다. 데이터베이스의 첫 번째 사용자 만 로그인 할 수 있습니다. 내가 어떻게 올바르게 설정할 수 있는지 제안 해주십시오. 감사합니다데이터베이스의 사용자 세부 정보와 비교하여 사용자 로그인

private class thehandler implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent ae) { 
     String namevalue = usertext.getText(); 
     String pwdvalue = pwdtext.getText(); 

     //read values from user table in sql database  
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String conUrl = "jdbc:mysql://localhost/hall?" + 
           "user=root&password=blend"; 

     Connection con = DriverManager.getConnection(conUrl); 
     Statement stmt = con.createStatement(); 

     ResultSet rs = stmt.executeQuery("SELECT * FROM user"); 

     while(rs.next()) { 

      if(namevalue.equals(rs.getString("userName")) && pwdvalue.equals(rs.getString("password"))) { 
      JOptionPane.showMessageDialog(null, "You are logged in", 
        "Makhall login", JOptionPane.INFORMATION_MESSAGE); 
      //move on to homepage if user is valid 
      homePage home = new homePage(); 
      home.setAlwaysOnTop(rootPaneCheckingEnabled); 
      } 
      else { 

      JOptionPane.showMessageDialog(null, "Incorrect username or password", 
        "Error", JOptionPane.ERROR_MESSAGE); 
      } 
      break; 
     } 
    } 
    catch (SQLException e) { 
     System.out.println("SQL Exception: "+ e.toString()); 
    } 
    catch (ClassNotFoundException cE) { 
     System.out.println("Class Not Found Exception: "+ cE.toString()); 
    } 

    } 
} 
+0

뭐가 잘못 됐는지조차 말하지 마세요. 다른 사람이 코드를 평가하도록하려면 [코드 검토] (http://codereview.stackexchange.com/)를 시도하십시오. 그렇지 않으면 작동하지 않는 내용과 수행 할 내용을 알려주십시오. – Widor

+0

게시 한 코드의 품질과 문제는 웹 보안을 실제로 읽지 않고 자신 만의 보안 조치를 구현하지 말고 조언을 해줄 수 있습니다. – Joost

+1

암호를 데이터베이스에 일반 텍스트로 저장하고 있습니까? Yikes. 내가 가입하지 않으려면 어떤 웹 사이트입니까? – bluevector

답변

3

죄송합니다, 이것은 끔찍한 코드라고 생각합니다. UI, 데이터베이스 연결, 질의 등 모든 것이 함께 섞여 있습니다. Java는 객체 지향 언어입니다. 좋은 물건 디자인의 세입자 중 하나는 응집력이 있습니다. 한 가지 수업을 잘 해보십시오.

데이터 액세스 개체로 데이터베이스 쿼리를 분리하여 시작하십시오. 작동 시키거나 테스트하고 다른 클라이언트가이를 사용하게하십시오. 보다 단순한 객체를 공동 작업하여 복잡한 솔루션을 구축 할 수 있습니다.

즉각적인 문제는 SELECT에 WHERE 절이 필요하다는 것입니다 : WHERE username = ?.

사용자의 암호 만 확인하고 싶을뿐입니다.

그 물음표는 고의적입니다. Statement가 아닌 PreparedStatement를 사용하십시오.

3

모두을 데이터베이스에서 선택합니다. 이것을 절대하지 마십시오. 대신 주어진 로그인이있는 사용자를 선택하십시오. 존재하는 경우 암호를 확인하십시오. 존재하지 않으면 로그인 자체가 올바르지 않습니다. 또한

: UI 코드에서

  • 별도의 데이터베이스 액세스 코드를 입력합니다. 그것들은 별도의 수업에 있어야합니다.
  • 일반 텍스트 암호를 데이터베이스에 저장하지 마십시오. 그들을 해시하고, 해시하고, 암호를 확인하고, 암호 해독하고, 해시하고, 데이터베이스에 저장된 해시 및 해쉬 된 암호와 비교하십시오.
0

나는 또한 동일한 프로그램을 만들었습니다. 여기를 참조하십시오 :

String m=jt1.getText(); 
String n= new String(jt2.getPassword()); 
try{   
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost/darshanproject","root",""); 
      Statement st = con.createStatement(); 
      String q="select * from emp where UID='"+m+"'"; 
      ResultSet rs=st.executeQuery(q); 
      rs.next(); 
      String user, pass; 
      user =rs.getString("UID"); 
      pass =rs.getString("password"); 
      { if(m.compareTo(user)==0) 
       if(n.compareTo(pass)==0) 
        System.out.println("login Success"); 
       else 
        System.out.println("Wrong Password"); 

      } 
     }catch(Exception ex){ 
      System.out.println(ex); 
     } 
관련 문제