gpt4 book ai didi

java - 我是否错误地为我的 transaction_login 方法实现了 Java 上的准备语句?我不确定何时出现 SQLExceptions

转载 作者:行者123 更新时间:2023-12-01 16:47:37 25 4
gpt4 key购买 nike

5 月 12 日下午 1:30 更新:我对代码进行了大量编辑,但测试用例仍然无法运行。我不确定从哪里开始,因为测试用例很简单。了解哪里可能出了问题将会很有帮助。

login 接受用户名和密码,并检查该用户是否存在于数据库中以及密码是否匹配。要计算哈希值,请修改上面的代码。在单个 session (即程序的单个实例)内,只应登录一个用户。一种好的做法是每个测试用例都以登录请求开始。确保程序终止时注销用户。为了简单起见,您可以在程序中使用局部变量来跟踪用户的登录状态。您不需要在数据库内跟踪用户的登录状态。如果再次尝试登录,请返回“用户已登录”。


public String transaction_login(String username, String password) {
if (LOGGED_IN == 0) {
try {
SecureRandom random = new SecureRandom();
byte[] salt = new byte[16];
random.nextBytes(salt);
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, HASH_STRENGTH, KEY_LENGTH);
SecretKeyFactory factory = null;
byte[] hash = null;
try {
factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
hash = factory.generateSecret(spec).getEncoded();
} catch (NoSuchAlgorithmException | InvalidKeySpecException ex) {
throw new IllegalStateException();
}
/* RUNNING SQL QUERY*/
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(USER_ACCESS);
while (rs.next()) {
String result_username = rs.getString("username");
byte[] result_hash = rs.getByte("hashVal");
if (result_username.equalsIgnoreCase(username) && Arrays.equals(result_hash, hash)) {
LOGGED_IN++;
return "Logged in as " + username + "\n";
}
}
rs.close();
return "Login failed\n";
} catch (SQLException se) {
se.printStackTrace();
se.getErrorCode();
} finally {
checkDanglingTransaction();
}
} else {
return "User already logged in\n";
}
}

最佳答案

您的声明部分需要修复才能解决多个问题:

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(USER_ACCESS); // SELECT * FROM User
while (rs.next()) {
String result_username = rs.getString("username");
byte[] result_password = rs.getBytes("password"); // not single byte
if (result_username.equalsIgnoreCase(username) && Arrays.equals(result_password, hash)) {
LOGGED_IN++;
return "Logged in as " + username + "\n";
} // do not return here, check for other users!
}
rs.close();
return "Login failed\n";

关于java - 我是否错误地为我的 transaction_login 方法实现了 Java 上的准备语句?我不确定何时出现 SQLExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com