1. 程式人生 > 實用技巧 >Docker 安裝Mysql,RabbitMQ

Docker 安裝Mysql,RabbitMQ

實現功能:

1、需求:
        模擬使用者登入功能的實現。
2、業務描述:
    程式執行的時候,提供一個輸入的入口,可以讓使用者輸入使用者名稱和密碼
    使用者輸入使用者名稱和密碼之後,提交資訊,java程式收集到使用者資訊
    Java程字連線資料庫驗證使用者名稱和密碼是否合法
    合法:顯示登入成功
    不合法:顯示登入失敗
3、資料的準備:
    在實際開發中,表的設計會使用專業的建模工具,我們這裡安裝一一個建模工具: PowerDesigner
    使用pD工具來進行資料庫表的設計。(為了方便我已經把建表程式碼放在下面)

SQL表:user_login.sql:

drop table if exists t_user;

/*==============================================================*/
/* Table: t_user                                                */
/*==============================================================*/
create table t_user
(
   id                   bigint auto_increment,
   userName             
varchar(255), userPwd varchar(255), name varchar(255), primary key (id) ); insert into t_user(userName,userPwd,name) values('zhangsan','123','張三'); insert into t_user(userName,userPwd,name) values('llisi','123','李四'); commit; select * from t_user;

連線資料庫測試程式碼:

import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Test07_模擬使用者登良功能的實現 {
    public static void main(String[] args) {
        //初始化一個介面的方法
        Map<String,String> userLogin = chuShiHuaUi();
        //驗證使用者名稱和密碼
        Boolean dengLu = login(userLogin);
        //最後輸出結果
        System.out.println(dengLu ? "登入成功!" : "登入失敗!");
    }

    private static Boolean login(Map<String, String> userLogin) {
        //打標記
        Boolean b = false;

        Connection conn = null;
        Statement s = null;
        ResultSet rs = null;
        try{
            //1、註冊驅動
            Class.forName("com.mysql.jdbc.Driver");
            //2、獲取連線
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/donglijiedian","root","zhixi158");
            //3、獲取資料庫操作物件
            s = conn.createStatement();
            //4、操作MySQL //SQL語句中字串是'',要想獲取資料要加雙引號,中間加上資料

            String sql = "select * from t_user where userName = '"+userLogin.get("userName")+"' and userPwd = '"+userLogin.get("userPwd")+"'";
            rs = s.executeQuery(sql);
            //5、處理查詢結果集
            //使用者名稱錯的情況下查不到記錄,使用者名稱正確情況下也最多查出一條記錄,所以用if就夠了
            if(rs.next()){
                return true;//如果存在這條記錄就返回
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            //6、釋放資源,由內到外
            try{
                if(rs != null)
                    rs.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            
            try{
                if(s != null)
                    s.close();
            }catch(Exception e){
                e.printStackTrace();
            }

            try{
                if(conn != null)
                    conn.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        return b;
    }

    private static Map<String, String> chuShiHuaUi() {
        Scanner s = new Scanner(System.in);
        //獲取使用者名稱
        System.out.println("使用者名稱:");
        String userName  = s.nextLine();//nextLine返回一行資料

        //獲取密碼
        System.out.println("密碼:");
        String userPwd = s.nextLine();

        //組裝Map集合
        Map<String,String> userLogin  = new HashMap<>();
        userLogin.put("userName",userName);//新增使用者名稱
        userLogin.put("userPwd",userPwd);//新增密碼
        return userLogin;//返回集合資料
    }
}

SQL注入問題:

在我們測試的時候,驗證使用者名稱和密碼發現是沒有問題的。

但是我們輸入一些特定的字元,就發現了問題:

發現輸入一些執行的字元會出現登入成功,這顯然是不符合我們的需求的。

解決SQL注入的方法: