#JDBC_用户登录功能界面的的初始化
package com.snailxq.jdbc;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/* 1.需求:
模拟用户的的登录功能
* 2.当前程序存在问题,这种现象被称为SQL注入
* 用户名:wq
密码:wq' or '1'='1
登录成功
3.导致SQL注入的根本原因:
用户输入的信息中含有SQL语句关键字,并且这些关键字参加SQL语句的编译过程。
导致了SQL语句的原意被扭曲,达到了SQL注入。
* */
public class JDBCTest06 {
public static void main(String[] args) {
//初始化一个界面
Map<String,String> userLoginInfo = initUI();
//验证用户名和密码
boolean loginSuccess = login(userLoginInfo);
//输出结果
System.out.println(loginSuccess ? "登录成功":"登录失败");
}
/**
* 用户登录
* @param userLoginInfo 用户登录信息
* @return
*/
private static boolean login(Map<String, String> userLoginInfo) {
// 打标记
boolean loginSussess =false;
//单独定义变量
String loginName =userLoginInfo.get("loginName");
String loginPwd =userLoginInfo.get("loginPwd");
Connection connection =null;
Statement statement= null;
ResultSet resultSet = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/everours","root","333");
//3.获取数据库连接对象
statement =connection.createStatement();
//4.执行SQL
String sql ="select * from t_user where loginName='"+loginName+"'and loginPwd ='"+loginPwd+"'";
//以上的正好完成了SQL语句的拼接,一下代码的含义是发送SQL语句给DBMS,DBMS进行编译
//正好用户提供的“非法信息”编译进去。导致的了原SQL原意被扭曲。
resultSet =statement.executeQuery(sql);
//5.处理结果集
if (resultSet.next()){
loginSussess=true;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//6.释放结果集
if (resultSet !=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}if (statement !=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}if (connection !=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return loginSussess;
}
private static Map<String, String> initUI() {
Scanner s= new Scanner(System.in);
System.out.print("用户名:");
String loginName=s.nextLine();
System.out.print("密码:");
String loginPwd=s.nextLine();
Map<String,String> userLoginInfo =new HashMap<>();
userLoginInfo.put("loginName",loginName);
userLoginInfo.put("loginPwd",loginPwd);
return userLoginInfo;
}
}