为了账号安全,请及时绑定邮箱和手机立即绑定

验证用户 Mysql Java?

验证用户 Mysql Java?

素胚勾勒不出你 2022-11-30 16:09:20
我用这个开发做了这个查询但是我在接收 API 时遇到问题我尝试验证用户登录但总是 API RESPONSE LOGIN SUCCESS我用 Java Spring Boot 和 Mysql 做了这个这是我的代码:@Overridepublic List<UserDto> getUsers() {    List<UserDto> list = new ArrayList<UserDto>();    try {        Connection con = getConnection();        PreparedStatement ps = con.prepareStatement("Select * from tableregister");        ResultSet rs = ps.executeQuery();        while (rs.next()) {            UserDto data = new UserDto();            data.setName(rs.getString("name"));            data.setLastname(rs.getString("lastname"));            data.setEmail(rs.getString("email"));            data.setUsername(rs.getString("username"));            data.setNumber(rs.getString("number"));            data.setPassword(rs.getString("password"));            list.add(data);        }    } catch (Exception e) {        e.printStackTrace();    }    return list;}我先做了这个@Overridepublic ApiResponseDto getlogin(UserDto usersLogin) {  try{       Connection con = getConnection();       Statement st=con.createStatement();       ResultSet rs=st.executeQuery("select * from tableregister where username='"+usersLogin.getUsername()+"' and password='"+usersLogin.getPassword()+"'");       if (usersLogin.getUsername() != null && usersLogin.getPassword() != null) {           return new ApiResponseDto("Success", "Login: ");       } else {           ApiResponseDto apiResponseDto = new ApiResponseDto("Error", "Error Login");           apiResponseDto.setErrorCode(2);           return apiResponseDto;       }   } catch (Exception e) {       e.printStackTrace();       return new ApiResponseDto("Error", "Error: " + e.toString());   }}
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

您分享的两个片段都是错误的。

在第一个片段中,您执行了一个查询(顺便说一句,由于字符串连接,该查询容易受到 SQL 注入的攻击),但忽略其结果并仅检查作为参数传递的对象

在第二个片段中,您再次执行查询,但忽略结果,从数据库中获取所有用户,并检查他们是否存在。

相反,您需要根据传递的参数进行查询,并检查查询是否返回了任何结果:

@Override

public ApiResponseDto getlogin(UserDto usersLogin) {

    try {

        // Assumption: The connection is pooled, and doesn't require closing.

        Connection con = getConnection();

        try (Preparestament ps = con.preparestament("select * from tableregister where username = ? and password = ?") {

            ps.setString(1, usersLogin.getUsername());

            ps.setString(2, userLoging.getPassword());

            try (ResultSet rs = ps.executeQuery()) {

                if (rs.next()) {

                   return new ApiResponseDto("Success", "Login Success");

                } else {

                    ApiResponseDto obj = new ApiResponseDto("Error", "Error Login");

                    obj.setErrorCode(1);

                    return obj;

                }

            }

        }

    } catch (Exception e) {

        e.printStackTrace(); // Or log the error somehow

        return new ApiResponseDto("Error", "Error: " + e.toString());

    }

}

PS:

请注意,在您的两个代码段中,您都没有正确关闭 JDBC 对象,从而导致泄漏。这可以使用 try-with-resource 语法相对巧妙地完成。


查看完整回答
反对 回复 2022-11-30
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您需要检查结果集。您可以这样做。


ResutSet rs = st.executeQuery....

if(rs.next()) {

  String username = r.getUserName();

  ...

}


查看完整回答
反对 回复 2022-11-30
  • 2 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信