DBUtils dbUtils = new DBUtils(); String selectSQL = "select * from user where uname = ? and upwd = ? "; List<Object> paras = new ArrayList<Object>(); paras.add(username); paras.add(password); Map<String,Object> rs = dbUtils.queryOneRow(selectSQL,paras); //验证登录是否成功 if (rs.size() > 0){ String uid = rs.get("uid").toString(); username = rs.get("uname").toString(); CookieUtils.addCookie("cuid",uid,response); CookieUtils.addCookie("cuname",username,response); JsUtils.jsAlertGo(out,"登录成功","index.jsp"); }else{ JsUtils.jsAlertBack(out,"用户名或密码不正确,登录失败!"); } dbUtils.close();
时间: 2024-02-14 08:22:32 浏览: 50
这段代码是一个Java Web应用程序中的登录验证逻辑。它首先创建了一个名为`dbUtils`的`DBUtils`对象,然后使用`uname`和`upwd`两个参数在`user`表中查询记录。查询结果以`Map`对象的形式返回,并检查是否有至少一条记录。如果查询结果非空,那么登录成功,将`uid`和`uname`两个值存储在Cookie中,并跳转到`index.jsp`页面。如果查询结果为空,那么登录失败,提示用户用户名或密码不正确,不进行Cookie和页面跳转操作。最后,通过调用`dbUtils.close()`方法关闭与数据库连接的资源。
需要注意的是,这段代码存在SQL注入漏洞,因为它直接将参数插入到SQL语句中,而没有使用预编译语句或其他防御措施来防止恶意输入。建议使用PreparedStatement替代Statement来执行SQL查询,这样可以有效避免SQL注入攻击。
相关问题
@Override public List<Book> blurryName(Book book) throws SQLException { String sql ="select * from book where book_name like ?"; List<Book> list = qr.query(DBUtil.getConnection(),sql,new BeanListHandler<Book>(Book.class),"%"+book.getBook_name()+"%"); return list; }
这段代码是一个Java方法,用于从数据库中模糊查询书籍的信息。blurryName方法接收一个Book对象作为参数,然后使用JDBC操作数据库,执行SQL语句,将模糊查询到的Book对象封装成一个List集合返回。具体来说,这段代码使用了一个名为"qr"的QueryRunner对象,它是Apache Commons DbUtils库提供的一个简化JDBC操作的工具类。blurryName方法使用了QueryRunner对象的query方法,该方法接收一个Connection对象、一个SQL语句、查询结果集处理器和一些参数,然后执行SQL语句并返回查询结果。在这段代码中,SQL语句是"select * from book where book_name like ?",其中问号表示占位符,代表后面的参数。模糊查询使用了"like"关键字,可以匹配包含指定字符串的所有记录。
最后,blurryName方法使用Book对象的get方法获取book_name的属性值,并将它作为参数传递给query方法。由于查询结果可能有多条记录,所以使用了BeanListHandler类将结果集封装成一个List集合,并将它返回。里面用到了Java的泛型特性,将List中的元素类型指定为Book类,表示查询结果是一组Book对象。
{ User user = null; try { QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from user where username=?"; user = queryRunner.query(sql, new BeanHandler<User>(User.class), username); if (user != null) { return "true"; } else { return "false"; } } catch (Exception e) { e.printStackTrace(); } return "none"; }将此段代码中的queryRunner替换
可以使用PreparedStatement对queryRunner进行替换,示例代码如下:
```
User user = null;
try {
Connection conn = DBUtils.getConnection();
String sql = "select * from user where username=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, username);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setAge(rs.getInt("age"));
// ...
}
rs.close();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
if (user != null) {
return "true";
} else {
return "false";
}
```
需要注意的是,此处需要手动关闭数据库连接,避免资源泄露。同时,代码中也需要手动从ResultSet中读取数据,再赋值给User对象,相对于BeanHandler来说,代码量稍微多一些。