大家在写登录代码时,有时候会不注意SQL注入问题,这就可能给某些人一些可乘之机,那么什么是sql注入问题呢?
SQL注入问题是在拼接sql时,有一些sql的特殊关键字参与字符串的拼接,会造成安全问题。
简单的来说就是输入“a' or 'a' = 'a ”,可以直接登录进去。
- 今天呢也给大家带来了解决问题的方式,使用PreparedStatemnt对象解决,用?作为占位符。在上一篇代码的基础上修改:(定义sql、获取对象、给?赋值、执行sql)
public boolean login(String username,String password){
//判断连接数据库是否成功
if (username == null || password ==null){
return false;
}
Connection conn = null;
PreparedStatement pstmt =null;
ResultSet rs =null;
try {
//1.注册驱动,获取连接
conn = JDBCUtils.getConnection();
//2.定义sql
String sql="select * from user where username = ? and password = ?";
//3.获取执行sql的对象
pstmt = conn.prepareStatement(sql);
//给?赋值
pstmt.setString(1,username);
pstmt.setString(2,password);
//4.执行查询,不需要传递sql
rs = pstmt.executeQuery();
//5.判断
return rs.next();
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally{
JDBCUtils.close(pstmt,conn,rs);
}
return false;
}
- 运行结果
注意:后期都会用PerparedStatement来完成增删改的所有操作,可以防止SQL注入而且效率也会更高!