在Java中构建注册功能

时间:2013-02-28 00:05:28

标签: java

我正在使用java中的注册和登录程序。因为我是java的新手,所以我不确定注册部分要使用什么。他们是否有像C ++这样的结构来存储帐户的信息?或者类似而简单的方法可以做到这一点?

此外,我现在正在尝试使用数组方法,这意味着每次用户输入所需信息时,它都会将每个值存储到相应的数组中。例如

final Vector<String>[] usernameV = (Vector<String>[]) new Vector [100];

从用户名文本字段

读取输入后
usernameIn = usernameField.getText();

该值将存储到向量

usernameV[i].add(usernameIn);

但是,如果我有getPassword(),我可以使用什么;存储来自JPasswordField的输入密码?

提前致谢

3 个答案:

答案 0 :(得分:1)

您可以使用字符串[] []和

string[0][0] = "user1"
string[0][1] = "password1"
string[1][0] = "user2"
string[1][1] = "password2"

你是java新手,但你可以尝试使用HashMaps,这个问题更容易实现,但最初难以实现。

看这里http://www.java-tips.org/java-se-tips/java.util/how-to-use-of-hashmap.html

答案 1 :(得分:0)

Java中struct的类似之处是类(通常是值对象的“bean”)。你可以拥有

class User {
    public String username;
    public String password;
}

模仿结构。虽然更常见的是豆

class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    // getPassword and setPassword similar
}

这很冗长,但提供了一些额外的封装,因为类外的世界依赖于方法,而不是它们作为私有变量的实现。

然后您的用户“数据库”可能是地图。

HashMap<String,User> allUsersByName = new HashMap<String,User>();

// store a new user or update
allUsersByName.put(username, user);

// look up a user
allUsersByName.get(user);

通常用户数据库需要在应用程序重启时保持不变,因此您将使用关系数据库和一些ORM库(如Hibernate),或者您将编写手动数据访问代码以将上述内容转换为用户的“SELECT”和“INSERT”表

良好的安全性实践会在username + salt上存储单向加密哈希函数的salt和值。但这是另一个故事 - 问题是在结构的位置使用什么。

答案 2 :(得分:0)

好的,我做了一种更简单的方法来存储用户名和密码数据。当用户提交注册表单时,它将输出到文本文件

private class submitListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        try {
            String newEmail, newUser, systemMsg;
            char[] newPass;
            char[] confirmNewPass;

            newEmail = emailField.getText();
            newUser = usernameField.getText();
            newPass = passwordField.getPassword();
            confirmNewPass = confirmPassField.getPassword();

            String strPass = new String(newPass);
            String strConfPass = new String(confirmNewPass);
            if(strPass.equals(strConfPass) && !newEmail.isEmpty() && !newUser.isEmpty() && 
                    !strPass.isEmpty()){
                BufferedWriter out = new BufferedWriter(new FileWriter("Data.txt", true));
                BufferedWriter emailOut = new BufferedWriter(new FileWriter("email.txt", true));
                out.write(newUser);
                out.write("\t\t");
                out.write(newPass);
                out.write(System.getProperty("line.separator"));
                emailOut.write(newEmail);
                emailOut.write(System.getProperty("line.separator"));
                systemMsg = "New account created, please log in.";
                JOptionPane.showMessageDialog(null, systemMsg);
                ((CardLayout)cardPanel.getLayout()).show(cardPanel, "login");
                emailField.setText(null);
                usernameField.setText(null);
                passwordField.setText(null);
                confirmPassField.setText(null);
                out.close();
                emailOut.close();
            }
            else{
                systemMsg = "Please enter the missing information.";
                JOptionPane.showMessageDialog(null, systemMsg);
            }
        }catch(IOException E){}
    }
}

然后它会将登录信息与这些现有的文本文件进行比较,如下所示:

private class LoginListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        String username, inUsername, inPass, str = "Incorrect username or password.";
        char[] password;

        username = usernameField.getText();
        password = passwordField.getPassword();
        //Convert char to str
        String convertPass = new String(password);

        try {
            fileScan = new Scanner(new File("Data.txt"));
        }catch(Exception err){}

        while(fileScan.hasNext()){
            inUsername = fileScan.next();
            inPass = fileScan.next();
            if(username.equals(inUsername) && convertPass.equals(inPass)){
                ((CardLayout)cardPanel.getLayout()).show(cardPanel, "main");
                counter++;
            }
        }
        if(counter == 0){
            JOptionPane.showMessageDialog(null, str);   
            usernameField.setText(null);
            passwordField.setText(null);
        }
        fileScan.close();
    }
}

但是当我运行该程序时,它会报告错误的用户名或密码,即使它们是正确的。如何解决这个问题?