楊 晟
(湖南信息職業(yè)技術學院,湖南 長沙 410200)
在人們的遠程出行中,乘火車出行的交通方式一直占據(jù)著首要地位[1],隨著鐵路運輸?shù)陌l(fā)展,特別是高速鐵路建設的發(fā)展,鐵路的運輸能力得到大幅提高,人們對鐵路出行的依賴性日益增加[1]。購票作為乘客出行的前提,是決定乘客出行體驗的重要因素[3]。
傳統(tǒng)的車站窗口售票存在車票信息獲取不便、購票費時費力等問題[4]。人們希望能方便省時地進行火車票的購票、退票及改簽等操作,以便于能合理安排出行規(guī)劃,滿足快捷高效的出行需要。而手機等移動互聯(lián)網(wǎng)設備的大規(guī)模普及,也為人們的在線購票創(chuàng)造了有利條件。相比于傳統(tǒng)的售票方式,在線售票系統(tǒng)具有購票成本低、效率高、不受時間和空間限制等優(yōu)點[5-7],能夠幫助乘客實時了解余票情況,節(jié)約乘客的時間以及緩解人工售票窗口的壓力。
本文設計了一個基于SpringBoot的在火車票售票管理系統(tǒng)。乘客可以方便快捷地進行車票的購買;管理員可以使用系統(tǒng)方便快捷地進行站點信息和車次信息的維護,實現(xiàn)對車票信息的統(tǒng)一管理。
系統(tǒng)總體功能有用戶功能模塊、站點功能模塊、車次功能模塊、車廂功能模塊、車票功能塊理、訂單功能模塊和乘車人功能模塊7個部分。管理員可以執(zhí)行對用戶功能模塊、站點功能模塊、車次功能模塊和車廂功能模塊的管理操作;乘客可以進行購票、退票、改簽、查詢訂單信息等操作。
為了使系統(tǒng)能夠有效防止非法訪問、數(shù)據(jù)泄露和惡意攻擊,必須對系統(tǒng)進行一系列安全性設置。首先,系統(tǒng)應能夠對用戶的身份進行驗證,只有驗證通過的用戶才能訪問系統(tǒng)。其次,系統(tǒng)對用戶的操作權限進行控制,防止用戶越權使用系統(tǒng)。再次,系統(tǒng)還應該采用參數(shù)化查詢以及預編譯SQL腳本等方式防止SQL注入。最后,系統(tǒng)還應能有效防止跨站腳本攻擊(Cross-Site Scripting,XSS)和跨站請求偽造(Cross-Site Request Forgery,CSRF)等網(wǎng)絡攻擊。
2.1.1 用戶信息管理模塊
用戶共有2種不同的角色,分別是管理員和乘客。管理員角色編碼為ADMIN,由系統(tǒng)擁有者在數(shù)據(jù)庫中直接創(chuàng)建;乘客角色編碼為PASSENGER,需要通過注冊才能成為系統(tǒng)用戶;管理員可以對用戶信息進行維護,包含用戶信息的凍結、封禁等功能。
2.1.2 站點信息管理模塊
管理員可以對站點信息進行維護,包括添加站點信息、修改站點公告信息、查詢站點信息、刪除站點信息等操作。
2.1.3 車次信息管理模塊
管理員可以對車次信息進行維護,包括對車次信息的添加、修改、查詢和刪除等操作。管理員在進行車次信息編輯時,可以為車次添加途經的所有站點信息;乘客在購票時,可以根據(jù)出發(fā)地和目的地查詢所有途經的車次信息列表。
2.1.4 車廂信息管理模塊
管理員可以對可售票車廂信息進行維護,包含對可售票車廂信息的添加、修改、查詢和刪除等操作,車廂信息包含不同座位類型的數(shù)量、空余座位數(shù)量,以此作為車票售票的依據(jù)。
2.1.5 乘車人信息管理模塊
乘客在購票前需要先完善乘車人信息,包含對乘車人信息的添加、修改、查詢和刪除等操作,乘車人信息添加完成后即可為其購票。
2.1.6 訂單信息管理模塊
乘客具有訂單的創(chuàng)建、查詢、取消等功能,訂單在支付前可以取消。創(chuàng)建訂單后必須在0.5 h內進行支付,否則訂單無效。
2.1.7 車票信息管理模塊
車票信息管理包含購票、改簽和退票功能。乘客在創(chuàng)建訂單時可以同時選擇多個乘車人進行車票選購。訂單創(chuàng)建完成后,系統(tǒng)將為每個乘車人創(chuàng)建對應的車票信息,即購票成功。乘客還可以在截止時間前進行改簽和退票。乘客選購火車票流程如圖1所示。
圖1 乘客選購火車票過程流程
系統(tǒng)采用Spring Security來進行安全性控制。首先,系統(tǒng)通過RBAC模型建立用戶、角色、權限的控制方式,將用戶的操作權限限制在所需的最小范圍內。然后通過注解@PreAuthorize標注所需的操作權限,以便判斷用戶是否能執(zhí)行該操作。其次,Spring Security默認會對所有輸出的內容進行自動HTML轉義,通過將Cookie設置為httpOnly,可以防止通過JavaScript訪問Cookie,從而減少XSS攻擊的風險。Spring Security通過在表單提交時自動添加一個隱藏字段來驗證CSRF令牌,以防止CSRF攻擊。該令牌在用戶登錄時生成,存儲在用戶的session中。當表單提交時,該令牌將被檢查。如果令牌不存在或與session中的令牌不匹配,請求將被拒絕。最后,系統(tǒng)使用MyBatis作為數(shù)據(jù)庫訪問層的ORM框架,采用參數(shù)化查詢以及預編譯方式來防止SQL注入,提高系統(tǒng)安全性。
本系統(tǒng)采用開源的MySQL數(shù)據(jù)庫進行數(shù)據(jù)存儲。數(shù)據(jù)表包含站點信息表、車次信息表、車廂信息表、車票信息表、訂單信息表、乘車人信息表、用戶信息表、權限信息表。
站點信息表(站點ID、站點名稱、站點編碼、所在省編碼、所在市編碼、所在區(qū)/縣編碼、詳細地址、聯(lián)系電話、站點級別、運營狀態(tài));車次信息表(車次ID、車次名稱、列車編號、列車型號、始發(fā)時間、特等座數(shù)量、一等座數(shù)量、二等座數(shù)量、軟臥數(shù)量、硬臥數(shù)量、軟座數(shù)量、硬座數(shù)量、無座數(shù)量);車廂信息表(車廂域ID、車廂編碼、車廂類型、特等座數(shù)量、一等座數(shù)量、二等座數(shù)量、軟臥數(shù)量、硬臥數(shù)量、軟座數(shù)量、硬座數(shù)量、無座數(shù)量、刪除標志位、創(chuàng)建人ID、創(chuàng)建時間、修改人ID、修改時間);車票信息表(車票ID、訂單ID、車次ID、車次編號、出發(fā)站點編碼、出發(fā)站點名稱、目的站點編碼、目的站點名稱、出發(fā)日期、車廂編碼、座位類型、預計出發(fā)時間、預計到達時間、乘車人姓名、乘車人身份證號碼、乘車人電話、價格);訂單信息表(訂單ID、訂單編號、乘客ID、總價、訂單狀態(tài));乘車人信息表(乘車人ID、乘車人姓名、乘車人性別、乘車人身份證號碼、乘車人電話);用戶信息表(用戶ID、用戶名、密碼、昵稱、性別、聯(lián)系電話、郵箱、角色編碼);權限信息表(角色編碼、權限編碼)。系統(tǒng)的E-R如圖2所示。
圖2 系統(tǒng)E-R
本文設計了一款火車票售票系統(tǒng),利用信息化技術解決鐵路出行高峰一票難求的問題,能夠有效實現(xiàn)乘客方便快捷地選購火車票、節(jié)約出行時間、實現(xiàn)快捷出行的需求,還能減少車站人工售票窗口的壓力,減少乘客購票平均等待時間,提升鐵道集團服務質量,節(jié)約人力成本。同時,系統(tǒng)使用Spring Security進行訪問權限控制,確保安全。