我已成功将我的Java应用程序连接到MySQL,然后我希望用户输入他们的用户名和密码.然后它会向MySQL发送查询并查找具有该用户名的位置,然后将给定的密码与数据库中的密码进行比较.在大多数情况下,这是有效的.假设用户名...
我已成功将我的Java应用程序连接到MySQL,然后我希望用户输入他们的用户名和密码.然后它会向MySQL发送查询并查找具有该用户名的位置,然后将给定的密码与数据库中的密码进行比较.
在大多数情况下,这是有效的.假设用户名是“ABC”,密码是“def”.如果提示输入用户名,并输入“ABC def”,则说它是成功的,与密码“def a”相同.我相信问题是rs.next(),它只检查空格之前的任何文本.
任何解决方案的想法?
String databaseUsername = "";
String databasePassword = "";
// Check Username and Password
System.out.print("Enter Username: ");
String name = sc.next();
System.out.print("Enter Password: ");
String password = sc.next();
// Create SQL Query
Statement stmt = connection.createStatement();
String SQL = "SELECT * FROM users WHERE users_name='" + name + "' && users_password='" + password+ "'";
ResultSet rs = stmt.executeQuery(SQL);
// Check Username and Password
while (rs.next()) {
databaseUsername = rs.getString("users_name");
databasePassword = rs.getString("users_password");
}
if (name.equals(databaseUsername) && password.equals(databasePassword)) {
System.out.println("Successful Login!\n----");
} else {
System.out.println("Incorrect Password\n----");
}
解决方法:
如果ResultSet返回一行,则SQL语句已经检查了用户名和密码.您无需再次检查.此外,您应该建立一个系统,其中相同的用户名不能多次使用. (在数据库中将其设为唯一或键)
此外,使用预准备语句和散列密码以避免注入和其他攻击.
编程基础网
本文标题为:Java和MySQL – 创建登录身份验证
基础教程推荐
猜你喜欢
- java开发Dubbo注解Adaptive实现原理 2023-05-13
- SprintBoot深入浅出讲解场景启动器Starter 2022-12-06
- Java设计模式之命令模式 2023-06-05
- 一文带你搞懂Java中方法重写与方法重载的区别 2023-07-14
- Java 多线程并发 ReentrantReadWriteLock详情 2023-01-13
- java – 想要使用hibernate查询中的事务从表中的文件夹和数据库值中删除现有文档 2023-10-29
- JAVA学习进阶篇之时间与日期相关类 2023-05-08
- 详解SpringBoot如何删除引用jar包中的无用bean 2023-01-29
- JavaWeb 之Ubuntu intelliJ 新建maven项目及配置tomcat 2023-09-01
- 在SpringBoot中配置Thymeleaf的模板路径方式 2023-04-16
