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中。