【问题标题】:how to compare the jTextEntry with database value如何将 jTextEntry 与数据库值进行比较
【发布时间】:2018-04-22 11:36:44
【问题描述】:
try     
                       {

                                Class.forName("org.sqlite.JDBC");
                                 Connection c=DriverManager.getConnection("jdbc:sqlite:voter.db");
                                  ResultSet rs;
                                Statement s;
                                        s=c.createStatement();
                                 p="select voterId,password  from voter where name='userName'";
                                  rs=s.executeQuery(p);
                while(rs.next())
                 {
                     vi=rs.getString("voterId");
                     pw=rs.getString("password");


                 if(voterId.equalsIgnoreCase(vi)&&Password.equalsIgnoreCase(pw))
                             {
                                           voting v =new voting();
                                           v.setVisible(true);
                                             this.dispose();

                              }else
                             {
                               System.out.println("Invalid pasword");
                              }
                        }

这是我的登录表单代码,我试图将 jTextField 的 voteID 和 Password 与存储在数据库中的 voterID 和密码进行比较。使用neatbeans,但它不允许我登录,而是输入了正确的用户名和密码。

【问题讨论】:

  • 是的,我正在尝试从结果集中比较字符串类型的值。可能有问题,可能是我的方式错误,请建议我
  • 如果voterId 是您的JTextField 用户ID,则需要voterId.getText().equalsIgnoreCase(vi) 进行比较。与Password类似。
  • 这里我的 voterId 是一个字符串类型的变量,即 String voterId=jTextField3.getText();之后我想将它与 vi 进行比较,类似地,username=jTextField2.getText() 但是当我比较并单击登录按钮时它没有响应我,这意味着什么都没有发生。
  • 如果您希望其他人分析您的代码,请按照正确和一致的缩进方式进行。

标签: java jdbc passwords


【解决方案1】:

您没有为在 gui 中输入的用户名选择数据库行。您根本没有使用 gui 中的用户名 - 您的查询已硬编码 'userName'。因此,您将获得名称为 userName 的用户的密码。

旁注:将原始密码以纯文本形式存储在数据库中是安全方面的糟糕做法。您应该拥有使用唯一盐的密码并存储散列密码。在 GUI 中输入的密码应使用相同的算法进行哈希处理并用于查询。这样,如果有人窃取数据库,他将无法学习用户密码。详情请见https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet。

使用像 Spring security 这样的 Java 框架可以为您解决许多这些问题。有关如何使用 Spring Security 创建登录表单的指南,请参阅 https://spring.io/guides/gs/securing-web/。该示例使用 InMemoryUserDetailsManager,但将其替换为 JdbcUserDetailsManager 将创建使用数据库的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多