-2

我有一个用户配置文件类,只是想知道加载它的最佳方式是什么。我有以下代码,想知道它是否是正确的方法。

UserProfile userProfile = null;
char[] password = {'a','b','c'};

for(UserProfile profile : UserProfiles){
    if(compareUserNameAndPassword("userName", password)){
        userProfile = profile;
    }

}

我的个人资料课程:

package jlibfprint;

public class UserProfile extends Profile {

    /**
     * constructor
     */
    public UserProfile(String userName, int id, char[] password){
        this.name = userName;
        this.id = id;
        this.password = password;
    }


    /**
     * Users password
     */
    private char[] password;

    /**
     * Set User password
     * @param password
     */
    public void setPassword(char[] password){

        this.password = password;

    }

    /**
     * compare passwords
     */
    public boolean compareUserNameAndPassword(String userName,char[] password) {

        if(this.name.equals(userName) && this.password.equals(password)){

            return true;

        }
        return false;

    }
}
4

1 回答 1

1

这不是类加载,而是检查作为单个类实例的对象。它应该是profile.compareUserNameAndPassword(userName,password)

您当前的操作方式意味着您的所有UserProfiles 都在内存中。通常它们会在数据库中,您会在查询中进行用户名和密码比较,然后仅在匹配时获取一个。

您可能还想考虑是否应该在某个时候对密码进行哈希处理。

您可能还应该考虑不要“重新发明轮子”并借用一些框架工具来提供帮助。Hibernate是一个对象关系管理工具,旨在简化从数据库中检索 Java 对象的过程。Spring是一个框架,它有助于促进良好的设计技术和管理授权和身份验证以及 MVC 方法

 /*
  * Retrieves a UserProfile from the database based on a username and password
  * Needs Apache Commons Codec package otherwise you have to use MessageDigest 
  * which gives a binary SHA-1
  * @param username The username to fetch
  * @param password The unhashed password
  * @return The UserProfile or null if the user was not found in the DB
  */ 
 private static UserProfile retrieveUserProfile(String username, char[] password) 
    throws SQLException {
     password  = DigestUtils.sha1Hex(password);
     //Assuming a pre-setup JDBC Connection object - `con`
     final String updateString = "SELECT userName, password FROM userProfiles" 
       + "WHERE username = ? AND password = ? LIMIT 1";
     PreparedStatement retrieveUserProfile = con.prepareStatement(updateString)
     retrieveUserProfile.setString(1,"username");
     retrieveUserProfile.setString(2,"password");
     ResultSet rs = retrieveUserProfile.execute();
     if(rs.next()) {
         return new UserProfile(username,password);
     }
     else {
         //User Not found
         return null;
     }
 }
于 2012-12-19T20:50:52.553 回答