2017-02-27 8 views
1

JSFプロジェクトがあり、ログインページを作成しようとしています。データベースからユーザー名とパスワードを取得して検証しました。プロジェクトにはJava BeanとマネージドBeanがあります。 DAOクラスは、ユーザーが正常にログインすると、Hello Mr.
< h:outputLabel value="#{mBLogin.user.firstName}" />を印刷したいと思いますが、私のDAOクラスをテストするときには名前を付けずにコンソールに名前を印刷しています問題!私が間違っていることを誰かにアドバイスできますか?JSF EL式とJava Beans

マイマネージドBeanクラス:

@ManagedBean 
    @SessionScoped 
    public class MBLogin { 

     User user = new User(); 
     LoginDAO loginDao = new LoginDAO(); 

     public String validteStudent() { 
      boolean valid = loginDao.validateStudent(user.getUserId(), user.getPassword()); 
      if (valid) { 
       user.getFirstName(); 
       HttpSession session = SessionUtils.getSession(); 
       session.setAttribute("username", user); 
       return "admin"; 
      } else { 
       FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, 
         "Incorrect Username and Passowrd", "Please enter correct username and Password")); 
       return "login"; 
      } 
     } 

     public void setUser(User user) { 
      this.user = user; 
     } 

     public User getUser() { 
      return user; 
     } 
    } 

私のJava Beanがクラス:

@Table(name = "students_info") 
    public class User { 

     @Column(name = "std_record_id") 
     private int id; 

     @Column(name = "std_id") 
     private String userId; 

     @Column(name = "first_name") 
     private String firstName; 

     @Column(name = "last_name") 
     private String lastName; 

     @Column(name = "web_password") 
     private String password; 

     public int getId() { 
      return id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     public String getFirstName() { 
      return firstName; 
     } 

     public void setFirstName(String firstName) { 
      this.firstName = firstName; 
     } 

     public String getLastName() { 
      return lastName; 
     } 

     public void setLastName(String lastName) { 
      this.lastName = lastName; 
     } 

     public String getUserId() { 
      return userId; 
     } 

     public void setUserId(String userId) { 
      this.userId = userId; 
     } 

     public String getPassword() { 
      return password; 
     } 

     public void setPassword(String password) { 
      this.password = password; 
     } 

    } 

マイDAOクラス:ログインページの後

public class LoginDAO { 

     static JKPlainDataAccess dataAccess = JKDataSourceFactory.getPlainDataAccess(); 
     User user; 

     public boolean validateStudent(String userName, String password) { 

      user = dataAccess.executeQueryAsSingleObject(User.class, "id,userId,firstName,lastName,password", 
        "SELECT std_record_id, std_id, first_name, family_name, web_password From students_info WHERE std_id=? and web_password=?", 
        userName, password); 
      JK.print("getAllEmployeeRecords() : ", user); 
      if(user != null) { 
       System.out.println(user.getFirstName()); 
       System.out.println(user.getLastName()); 
       return true; 
      } 
      return false; 
     } 

     public static void main(String[] args) { 
      LoginDAO a = new LoginDAO(); 
      a.validateStudent("200663042001", "1234"); 
     } 

    } 

私のXHTMLページ:

<ui:composition template="/WEB-INF/layouts/default.xhtml"> 
    <ui:define name="content"> 
    WELCOME Mr. <h:outputLabel value="#{mBLogin.user.firstName}" /> 
    AND <h:outputLabel value="#{mBLogin.user.lastName}" /> 
    </ui:define> 
</ui:composition> 
+0

Sidenode:平野でパスワードを保存しないでください-text、少なくともハッシュする必要があります。それ以外の場合、データベースリークにより、すべてのユーザーのパスワードが表示されます。これは、 "自分のパスワードを持っているすべての場所"のパスワードです。 – dognose

+0

@dognoseアドバイスをいただきありがとうございます。そのための良いチュートリアルをお勧めしますか? – Khaled

+0

ここには良いものがあります:http://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/ –

答えて

1

検証するとき、あなたはマネージドBeanのフィールドに割り当てることなく、セッション属性としてユーザーを置くように見える:

session.setAttribute("username", user); 

だから、どちらかのインスタンス・ユーザー変数にも、それを割り当てるか、単に使用します。

<ui:composition template="/WEB-INF/layouts/default.xhtml"> 
    <ui:define name="content"> 
    WELCOME Mr. <h:outputLabel value="#{username.firstName}" /> 
    AND <h:outputLabel value="#{username.lastName}" /> 
    </ui:define> 
</ui:composition> 

は、私はあなたのサービスの方法を変更することをお勧めアップデート:

public User validateStudent(..) 
あなたが実際に代わりにDAOでそれを設定するの照会をユーザに返す

..

こうして、あなたはにManagedBean方法を変更します

public String validteStudent() { 
    User validatedUser = loginDao.validateStudent(user.getUserId(), user.getPassword()); 
    if (validatedUser != null) { 
      this.user = validatedUser; 
      HttpSession session = SessionUtils.getSession(); 
      session.setAttribute("username", user); 
     .... 
+0

私は両方の提案を試しましたが、どちらもうまくいきませんでした: ( – Khaled

+0

これをインスタンス変数に代入する方法についてもっと説明できますか? session.setAttribute( "firstname"、user); – Khaled

+0

追加のヒントを使って更新をチェックしてください –

関連する問題