Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的服务器客户端密码/用户名检查_Java_Passwords_Client Server - Fatal编程技术网

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

Java中的服务器客户端密码/用户名检查,java,passwords,client-server,Java,Passwords,Client Server,我正在构建一个简单的客户机-服务器体系结构,其中客户机连接到服务器,然后服务器请求客户机的用户名和密码。用户名和密码应保存在文本文件中。如果正确,则应允许客户端为服务器输入命令 最好的方法是什么,包括从中提取项目的文本文件的格式 谢谢。您可以使用BufferedReader或Scanner从文件中读取用户名和密码。要编辑文件,可以使用BufferedWriter BufferedReader br = new BufferedReader(new FileReader(new File("C:\

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

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


谢谢。

您可以使用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中提供

最好的办法是什么

如果安全性是一个问题,您应该首先检查如何安全地存储密码。也许你是这个话题的第一站

包括从中绘制项目的文本文件的格式

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

  • 创建一个管理登录信息的类
    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);
    }
}
公共类LoginManager实现可序列化{
/**登录凭据的存储*/
private final Map loginData=新的ConcurrentHashMap();
公共布尔addUser(最终字符串用户名、最终字符串密码){
if(loginda.containsKey(用户名)){
返回false;
}
loginda.put(用户名、密码);
返回true;
}
公共布尔existUser(最终字符串用户名){
返回loginda.containsKey(用户名);
}
公共布尔校验密码(最终字符串用户名、最终字符串密码){
返回loginData.get(用户名).equals(密码);
}
}

当客户端在注册时输入密码时,计算密码的哈希值,并将哈希值与用户名一起存储在文本文件中。如果客户端再次登录,请计算密码的哈希值并进行比较。永远不要将密码存储在clear中。