Java中的服务器客户端密码/用户名检查

时间:2014-10-27 11:37:07

标签: java passwords client-server

我正在构建一个简单的客户端 - 服务器架构,客户端连接到服务器,然后服务器请求客户端的用户名和密码。用户名和密码应保存在文本文件中。如果它们是正确的,则应允许客户端输入服务器的命令。

最好的解决方法是什么,包括应该从中提取项目的文本文件的格式?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用BufferedReader或Scanner从文件中读取用户名和密码。要编辑文件,可以使用BufferedWriter。

BufferedReader br = new BufferedReader(new FileReader(new File("C:\\the\\path\\of_file.txt")));
String password = br.readLine();

要编辑它,您可以使用:

BufferedWriter bw = new BufferedWriter(new FileWriter(new File("C:\\file.path")));
bw.write(new_password);
bw.close();

java.io

包中提供了所有类

答案 1 :(得分:0)

  

这可能是最好的方法

如果安全性存在问题,您应首先检查如何安全地存储密码。 crackingstation.net可能是您在该主题上的第一站。

  

包括应从中抽取项目的文本文件的格式

这只是一个非常粗略的模型,可以让它尽可能简单:

  • 创建一个管理登录信息的班级LoginManager
  • 通过实现相应的接口
  • 使该类可序列化
  • 在服务器启动时,反序列化存储的信息
  • 在运行时,操纵登录凭据的集合,例如
    • 添加新的登录数据(创建帐户)
    • 编辑现有数据(更改密码请求)
    • 删除数据(用户想删除他的帐户)
  • 在服务器关闭时,序列化数据。

这里有一个非常基本的想法:

public class LoginManager implements Serializable {
    /** storage for login credentials */
    private final Map<String, String> loginData = new ConcurrentHashMap<>();


    public boolean addUser(final String username, final String password) {
        if (loginData.containsKey(username)) {
            return false;
        }

        loginData.put(username, password);
        return true;
    }


    public boolean existUser(final String username) {
        return loginData.containsKey(username);
    }

    public boolean checkPassword(final String username, final String password) {
        return loginData.get(username).equals(password);
    }
}