本詳細設計說明書是針對電子科大校園地圖(UESTC Campus Map)小程序的項目編寫。目的是對該項目進行詳細設計,在概要設計的基礎上進一步明確系統結構,詳細地介紹系統的各個模塊,為進行后面的實現和測...
F.1 引言
F.1.1 編寫目的
本詳細設計說明書是針對電子科大校園地圖(UESTC Campus Map)小程序的項目編寫。目的是對該項目進行詳細設計,在概要設計的基礎上進一步明確系統結構,詳細地介紹系統的各個模塊,為進行后面的實現和測試做準備。本詳細設計說明書的預期讀者為本項目小組的成員以及對該小程序感興趣,在以后想對系統進行拓展和維護的人員。
F.1.2 背景
說明:
a、待開發軟件系統的名稱:電子科大校園地圖小程序(UESTC Campus Map)
b、本項目的任務提出者:金成哲,陸冠臣,羅子建
本項目的開發者:金成哲,陸冠臣,羅子建
本項目的用戶:在校學生,教師,校園游客
本項目的計算中心:微信小程序
F.1.3 定義
(1) MVC Model View Controller ,是模型 ( model )-視圖 ( view )-控
制器(Controller)的縮寫。
(2) CURD 代表創建( Create )、更新 Update )、讀取 Retrieve
和刪除( Delete )操作。
(3) UCM 是 UESTC Campus Map 的簡稱。
F.1.4 參考資料
(1)《軟件工程》(第三版)·錢樂秋等編著·清華大學出版社
(2)《設計模式之禪》)《設計模式之禪》(第二版)·秦小波著·機械工業出版社(第二版)·秦小波著·機械工業出版社
(3)《玩轉DjangoDjango 2.0》·黃永祥著·清華大學出版社》·黃永祥著·清華大學出版社
(4)《數據庫要求說明書》
(5)《數據庫設計說明書》
(6)微信小程序開發文檔
F.2 程序系統的結構
整體架構:整體架構設計演示如下:
名稱 | 標識符 | 說明 |
客戶端 | Client | 客戶系統提供本地服務 |
服務端 | Server | 向客戶端提供資源,保存客戶端數據 |
數據庫系統 | Database | 存儲客戶端資源及相關信息 |
本地操作系統 | Local operating system | 客戶端提供交互界面的服務 |
電子科技大學統一身份認證系統 | Authentication system | 電子科技大學學生認證系統,提供學生認證平臺 |
微信服務器 | Wechat server | 提供UCM的應用生態服務 |
微信小程序后臺管理系統 | Miniprogram admin system | 小程序開發者管理小程序的版本更新及用戶數據分析 |
客戶端:采用 MVC 軟件架構設計,框圖演示如下
模型(即數據表):
名稱 | 標記符 | 說明 |
標記點表 | Location | 記錄校園地圖的地點描述以及具體地理位置 |
功能表 | Function | 記錄標記點的功能信息以及標簽分類 |
輪播圖表 | RollingImage | 記錄某標記點的輪播圖片 |
討論表 | Discussion | 記錄用戶發布討論的內容信息 |
評論表 | Comment | 記錄用戶參與評論的信息 |
用戶表 | User | 記錄用戶登錄賬戶以及學生認證等基本信息 |
控制:
名稱 | 標記符 | 說明 |
網絡請求 | Internet request | 提供連接服務,響應界面 |
存儲處理 | Storage Processing | 根據存儲請求,將相關數據存儲到對應數據表 |
數據清洗 | Data cleaning | 根據內置算法設計,對數據表的數據進行再處理 |
視圖:
名稱 | 標記符 | 說明 |
地圖界面 | Map | 根據不同校區的需要,提供地圖的功能介紹 |
討論界面 | Discussion | 給用戶提供論壇討論的服務,針對不同標記點發布討論內容 |
功能界面 | Function | 給對應標記點提供不同的功能介紹 |
認證界面 | Authentication | 為區分不同用戶,利用電子科大校園信息門戶的平臺,本小程序設計了一個校園身份認證的系統 |
歷史關注界面 | Historical Concerning | 為方便用戶查看以前參與的討論與功能的建設,故提供歷史關注的服務 |
輪播圖界面 | Rolling Image | 為豐富用戶對該標記點的認知與理解,提供對該標記點的輪播圖展示服務 |
登錄界面 | login | 用戶首次登錄小程序 |
服務端:
名稱 | 標記符 | 說明 |
日志系統 | Logging System | 自動記錄流式數據,各進程,異常信息 |
網絡模塊 | Network module | 提供連接服務 |
控制模塊 | Controling module | 根據服務請求,進行不同模塊的控制 |
數據庫操作模塊 | Database operation module | 寫入,查詢,修改或刪除數據庫的信息 |
F.3 網絡模塊
F.3.1 程序描述
網絡模塊主要是客戶端對服務器的網絡請求功能的模塊化實現,整個客戶端采用規范化的統一格式對服務器進行網絡請求。主要是為了更好的魯棒性以及可讀性。
F.3.2 功能
功能范例:
功能 | 輸入 | 輸出 | 格式/請求 |
校園身份認證 | openid、學號、密碼 | code、msg identity | json/POST |
微信登錄 | code encryptedData iv | code、msg、uid uNickName、uavaUrl: | json/POST |
發布功能 | uid functionCode locationID | code msg uid identity datatype data:[ {functionID functioncontent functiondescription locationID locationdescription locationLatitude locationLongitude}] | json/POST |
發布討論 | uid discussionCode locationID | code msg uid identity datatype data:[ discussionID presenttime locationID locationLatitude locationLongitude ] | json/POST |
評論他人 | uid uidor discussionID commentCode locationID | code msg datatype commentID | json/POST |
獲取發布歷史 | identity uid dataType | code msg uid identity: dataType data:[ discussionID discussionContent: locationID locationLatitude locationLongitude imgUrls:[ "https:********", ] ] | json/POST |
獲取討論列表 | locationID uid | code msg dataType data:[ { discussionID discussionCode discussioncontent: uNickName uavaUrl imgUrls:[] presenttime locationID locationLatitude locationLongitude: comment:[ {commentID commentcontent uNickName uorNickName}]}] | json/POST |
獲取功能列表 | uid locationID dataType | code msg data:[{undefined functionID: functionCode functioncontent functiondesription: locationID locationLatitud locationLongitude: }] | json/POST |
獲取輪播圖 | uid string dataType | code msg imgUrls:[ "https://123.png", "https://124.png",] | json/POST |
獲取所有標記點 | uid dataType: | code msg locationID:[] | json/POST |
刪除 | dataType uid dataType uid | code msg: | json/POST |
F.3.3 性能
運行 | 模塊組合 | 響應時間(ms) |
校園身份認證 | 網絡模塊、數據庫模塊 | 1000 |
微信登錄 | 登錄模塊、數據庫模塊、網絡模塊 | 500 |
發布功能 | 功能模塊、數據庫模塊、網絡模塊 | 200 |
發布討論 | 數據庫模塊、討論模塊 | 1000 |
評論他人 | 數據庫模塊、討論模塊、評論模塊、網絡模塊 | 200 |
獲取發布歷史 | 數據庫模塊、討論模塊、評論模塊、功能模塊、網絡模塊 | 1000 |
獲取討論列表 | 數據庫模塊、討論模塊、評論模塊、網絡模塊 | 1000 |
獲取功能列表 | 功能模塊、網絡模塊、數據庫模塊 | 300 |
獲取輪播圖 | 輪播圖模塊、數據庫模塊、網絡模塊 | 1000+ |
獲取所有標記點 | 數據庫模塊、網絡模塊、標記點模塊 | 200 |
刪除 | 所有模塊 | 100 |
添加標記點 | 數據庫模塊、網絡模塊、標記點模塊 | 200 |
F.3.4 輸入項
輸入輸出等參考功能F.3.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.3.5 輸出項
輸入輸出等參考功能F.3.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.3.6 算法
API接口防止重放攻擊和第三方濫用攻擊算法:
算法示例:
字段名 | 類型 | 含義 | 必填 | 備注 |
a | text | 請求的字段 | True | |
b | text | 請求字段 | True | |
appKey | text | 客戶端應用標識 | True | 一段唯一標識客戶端的字符串 |
salt | text | 隨機數(建議使用UUID) | True | |
timestamp | long | Unix時間戳(精確到秒) | True | |
sign | text | sha256簽名 | True | 計算方法:sha256(a+b+appKey+salt+timestamp+密鑰) |
例如:
a:"123",
b:"地圖",
appKey:"57673e9f4b774dd9a739ee668e38c0a1",
salt:"66785bb6-2df8-5e7e-a51b-cb7d257738e5",
timestamp:"1560761282",
密鑰:"651d-4bbf-350f-b477-fe1b",
客戶端利用sha256計算簽名:
sha256(123地圖57673e9f4b774dd9a739ee668e38c0a166785bb6-2df8-5e7e-a51b-cb7d257738e51560761282651d-4bbf-350f-b477-fe1b)
結果:423cb7cf98d7e11c4efa3ce042e4e4546ae342a565a460fd8443f814258d63b3
服務器流程說明:
服務器接收到數據后,首先驗證appKey是否合法,然后從數據庫中獲取該appKey對應的密鑰,然后再獲取當前服務器的時間戳,計算t = 服務器時間戳-timestamp,若t>60,則是一條重放消息,若小于60,則開始驗證簽名,即服務器利用相同的算法計算請求的sha256,對比是否相同,若相同,則做下一步操作,否則這是一條非法請求,直接響應錯誤信息。
F.3.7 流程邏輯
F.3.8 接口
用圖的形式說明本程序所隸屬的上一層模塊及隸屬于本程序的下一模塊、參數賦值和調用方式,說明與本程序具有直接關系之數據結構(數據庫、數據文卷)。
F.3.9 存儲分配
無特別要求
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
服務器 | 內存:50-100MB, 硬盤:50GB | 適當情況下可以擴容,采用分布式集群的方式運行服務端 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.3.10 注釋設計
1.單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.3.11 限制條件
必須在連接互聯網的情況下才能使用本模塊,否則將提示網絡異常信息。
F.3.12 測試計劃
需要結合其它模塊才能測試,此處不做說明。
F.3.13 尚未解決的問題
接口字段的模糊混淆處理,所以還是存在非法用戶進行惡意發送臟請求的可能。
F.4 日志模塊
F.4.1 程序描述
小程序日志系統
F.4.2 功能
提供日志記錄功能,為系統錯誤和恢復提供保障。
F.4.3 性能
日志信息分類
(1)等級由低到高:debug<info<warn<Error<Fatal;
(2)區別:
debug :級別最低,可以隨意的使用于任何覺得有利于在調試時更詳細的了解系統運行狀態的東東;
info : 重要,輸出信息:用來反饋系統的當前狀態給最終用戶的;
warn:可修復,系統可繼續運行下去;
Error: 可修復性,但無法確定系統會正常的工作下去;
Fatal: 相當嚴重,可以肯定這種錯誤已經無法修復,并且如果系統繼續運行下去的話后果嚴重。
F.4.4 輸入項
日志輸入針對不同的日志類別有所區別。
F.3.5 輸出項
日志文檔
文檔格式
log.error(“[接口名或操作名] [Some Error Msg] happens. [params] [Probably Because]. [Probably need to do].”);
log.error(String.format(“[接口名或操作名] [Some Error Msg] happens. [%s]. [Probably Because]. [Probably need to do].”, params));
或
log.error(“[Some Error Msg] happens to 錯誤參數或內容 when [in some condition]. [Probably Because]. [Probably need to do].”);
log.error(String.format(“[Some Error Msg] happens to %s when [in some condition]. [Probably Because]. [Probably need to do].”, parameters));
[Probably Reason]. [Probably need to do]. 在某些情況下可以省略; 在一些重要接口和場景下最好能說明一下。
每一條錯誤日志都是獨立的,盡可能完整、具體、直接說明何種場景下發生了什么錯誤,由什么原因導致,要采用什么措施或步驟。
F.3.6 算法
日志分析方法:
1.特征字符分析(Signature-based):
在日志中查找已知的漏洞特征,去發現黑客攻擊行為, 是最簡單的方法。
2.訪問頻率分析(Frequency analysis)
在黑客攻擊過程中,需要對系統進行各種特定的訪問,這些訪問與正常用戶訪問有很大差別, 每種攻擊行為都有不同的特征。
通過對大量用戶訪問數據的挖掘,可以發現這些異常訪問行為。
日志檢測方法:
1.漏洞掃描檢測:
黑客使用漏洞掃描器對 Web 應用進行掃描,可以用匹配 User-Agent 特征的方式進行檢測。如果自定義掃描器的 User-Agent,這個方法的效果可能會不好。但可匹配掃描器掃描的行為,
·訪問目標離散
·來源地址相對固定
·訪問結果大多數失敗
根據這些特征對 Web 訪問日志進行分析,即可提取出來可疑的掃描行為。
2.暴力破解檢測:
暴力破解密碼的特征是:
·相對固定的來源地址
·對登錄URL短時間內高頻率發起請求
·與漏洞掃描的區別主要是目標 URL 固定。
3.webshell 檢測
如果黑客發現系統漏洞,并且利用漏洞獲得上傳權限,會向系統 上傳 webshell。webshell 是一種后門程序,此程序由腳本語言編寫, 可以在 Web 服務器上運行,攻擊者可以通過網頁執行系統命令,讀寫 系統文件。從訪問行為的角度看,webshell 通常:
·只有攻擊者訪問
·來源地址相對固定
·訪問時間相對集中
·無內嵌其他頁面
通過這些特征即可提取出可疑文件,再通過人工確認的方式,檢測出 webshell。
F.3.7 流程邏輯
日志產出 ——>采集——>儲存——>分析——>儲存——>可視化
F.3.8 接口
結構設計:
日志工作流:
F.3.9 存儲分配
文件 | 存儲 | 備注 |
log | 2GB | 每天24:00進行當天日志歸檔 |
F.3.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.3.11 限制條件
無特別要求
F.3.12 測試計劃
結合其它模塊進行測試
F.3.13 尚未解決的問題
日志自動化分析工具的集成
F.5 數據庫操作模塊
F.5.1 程序描述
數據庫操作的封裝模塊
F.5.2 功能
對數據庫的增刪查改進行功能封裝,提供統一的接口
F.5.3 性能
功能操作 | 模塊組合 | 資源占用時間(ms) |
校園身份認證 | 網絡模塊、數據庫模塊 | 20 |
微信登錄 | 登錄模塊、數據庫模塊、網絡模塊 | 20 |
發布功能 | 功能模塊、數據庫模塊、網絡模塊 | 20 |
發布討論 | 數據庫模塊、討論模塊 | 100 |
評論他人 | 數據庫模塊、討論模塊、評論模塊、網絡模塊 | 20 |
獲取發布歷史 | 數據庫模塊、討論模塊、評論模塊、功能模塊、網絡模塊 | 100 |
獲取討論列表 | 數據庫模塊、討論模塊、評論模塊、網絡模塊 | 100 |
獲取功能列表 | 功能模塊、網絡模塊、數據庫模塊 | 50 |
獲取輪播圖 | 輪播圖模塊、數據庫模塊、網絡模塊 | 20 |
獲取所有標記點 | 數據庫模塊、網絡模塊、標記點模塊 | 20 |
刪除 | 所有模塊 | 50 |
添加標記點 | 數據庫模塊、網絡模塊、標記點模塊 | 20 |
F.5.4 輸入項
F.5.5 輸出項
操作反饋
F.5.6 算法
多表查詢算法:
一、交叉連接
交叉連接即笛卡兒乘積,是指兩個關系中所有元組的任意組合。一般情況下,交叉查詢是沒有實際意義的。
例如:如果希望得到學生表和選課表兩個關系模式的乘積,查詢語句為:
SELECT *
FROM學生表CROSS JOIN選課表
二、內連接
內連接是一種最常用的連接類型。內連接查詢實際上是一種任意條件的查詢。使用內連接時,如果兩個表的相關字段滿足連接條件,就從這兩個表中提取數據并組合成新的記錄,也就是在內連接查詢中,只有滿足條件的元組才能出現在結果關系中。
例如:要查詢每個已經選課的學生的情況,查詢語句為
SELECT*
FROM學生表INNER JOIN選課表ON學生表.學號=選課表.學號
分類:
1)等值連接:在連接條件中使用等于號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
2)不等連接:在連接條件使用除等于運算符以外的其它比較運算符比較被連接的列的列值。這些運算符包括>、>=、<=、<、!>、!<和<>。
3)自然連接:在連接條件中使用等于(=)運算符比較被連接列的列值,但它使用選擇列表指出查詢結果集合中所包括的列,并刪除連接表中的重復列。
三、自然連接
如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢就稱為自連接查詢。同一張表在FROM字句中多次出現,為了區別該表的每一次出現,需要為表定義一個別名。自連接是一種特殊的內連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表。
例如:要求檢索出學號為20210的學生的同班同學的信息,查詢語句為
SELECT學生表.*
FROM學生表JOIN學生表AS學生表1ON學生表.班級=學生表1.班級
WHERE學生表1.學號='20210'
四、外連接
內連接的查詢結果都是滿足連接條件的元組。但有時我們也希望輸出那些不滿足連接條件的元組信息。比如,我們想知道每個學生的選課情況,包括已經選課的學生(這部分學生的學號在學生表中有,在選課表中也有,是滿足連接條件的),也包括沒有選課的學生(這部分學生的學號在學生表中有,但在選課表中沒有,不滿足連接條件),這時就需要使用外連接。外連接是只限制一張表中的數據必須滿足連接條件,而另一張表中的數據可以不滿足連接條件的連接方式。
3種外連接:
1)左外連接(LEFTOUTER JOIN)
如果在連接查詢中,連接管子左端的表中所有的元組都列出來,并且能在右端的表中找到匹配的元組,那么連接成功。如果在右端的表中,沒能找到匹配的元組,那么對應的元組是空值(NULL)。這時,查詢語句使用關鍵字LEFT OUTERJOIN,也就是說,左外連接的含義是限制連接關鍵字右端的表中的數據必須滿足連接條件,而不關左端的表中的數據是否滿足連接條件,均輸出左端表中的內容。
例如:要查詢所有學生的選課情況,包括已經選課的和還沒有選課的學生,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表LEFT OUTER JOIN選課表ON學生表.學號=選課表.學號
左外連接查詢中左端表中的所有元組的信息都得到了保留。
2)右外連接(RIGHTOUTERJOIN)
右外連接與左外連接類似,只是右端表中的所有元組都列出,限制左端表的數據必須滿足連接條件,而不管右端表中的數據是否滿足連接條件,均輸出表中的內容。
例如:同上例內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表RIGHTOUTERJOIN選課表ON學生表.學號=選課表.學號
右外連接查詢中右端表中的所有元組的信息都得到了保留。
3)全外連接(FULL OUTER JOIN)
全外連接查詢的特點是左、右兩端表中的元組都輸出,如果沒能找到匹配的元組,就使用NULL來代替。
例如:同左外連接例子內容,查詢語句為
SELECT學生表.學號,姓名,班級,課程號,成績
FROM學生表FULL OUTER JOIN選課表ON學生表.學號=選課表.學號
F.5.7 流程邏輯
F.5.8 接口
F.5.9 存儲分配
模塊 | 存儲 | 備注 |
數據庫 | 內存:1GB 硬盤:50GB | 必要可擴容 |
F.5.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.5.11 限制條件
數據庫不在本地的需要訪問網絡
F.5.12 測試計劃
測試名稱 | 值說明 | 輸入方式 |
寫入數據庫 | 1.每個數據表的測試數據應包括:輸入完整,不完整,字段非法等情況 2.多表插入,單表插入 | 自動輸入 |
查詢數據庫 | 單表查詢,多表查詢 | 自動輸入 |
從數據庫刪除 | 無 | 自動輸入 |
F.5.13 尚未解決的問題
大數據量下的數據庫的分庫分表操作
F.6 討論模塊
F.6.1 程序描述
對用戶討論功能的封裝,提供統一接口。
F.6.2 功能
將討論功能進行封裝,負責與底層數據庫交互,提供統一的添加,修改和刪除接口。
F.6.3 性能
功能 | 模塊組合 | 延時(ms) |
發布討論 | 數據庫模塊、討論模塊 | 網絡:1000 數據庫:100 |
獲取討論列表 | 數據庫模塊、討論模塊、評論模塊、網絡模塊 | 網絡:1000 數據庫:100 |
F.6.4 輸入項
操作 | 輸入 | 輸出 | 格式 | |||
發布討論 | uid discussionCode locationID | code msg uid identity datatype data:[ discussionID presenttime locationID locationLatitude locationLongitude ] | json/POST | |||
獲取討論列表 | locationID uid | code msg dataType data:[ {undefined discussionID discussionCode discussioncontent: uNickName uavaUrl imgUrls:[] presenttime locationID locationLatitude locationLongitude: comment:[ {commentID commentcontent uNickName uorNickName}]}] | json/POST | |||
F.6.5 輸出項
見F.6.4 輸入項
F.6.6 算法
無
F.6.7 流程邏輯
(1)發布
(2)獲取
F.6.8 接口
F.6.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.6.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.6.11 限制條件
無
F.6.12 測試計劃
結合評論模塊、網絡模塊、數據庫模塊進行測試
F.6.13 尚未解決的問題
無
F.7 評論模塊
F.7.1 程序描述
評論模塊主要是對校園論壇討論的評論模塊,通過發布評論,用戶可以在線參與標記點的討論建設。評論模塊,提供一個評論收集與顯示的界面。
F.7.2 功能
用戶在評論界面,根據界面信息的渲染,對某些標記點的相關討論評論進行展示。其邏輯為用戶對某特定標記點發出評論列表的請求,向討論表獲取對應的評論列表,然后得到對應信息更新到界面中去。
如果用戶想要發布某些評論,發出發布評論請求,將評論更新到評論表中。
功能 | 輸入 | 輸出 | 格式/請求 |
評論他人 | uid uidor discussionID commentCode locationID | code msg datatype commentID | json/POST |
F.7.3 性能
運行 | 精度 | 響應時間(ms) |
評論某人 | 數據庫的寫入與查詢,精度較高 | 200 |
F.7.4 輸入項
輸入輸出等參考功能F.7.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.7.5 輸出項
輸入輸出等參考功能F.7.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.7.6 算法
F.7.7 流程邏輯
F.7.8 接口
F.7.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.7.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.7.11 限制條件
評論界面類似微信朋友圈的風格,但是只有評論內容的顯示,對評論內容的文字長度也有部分限制。
F.7.12 測試計劃
結合討論模塊,網絡模塊一起測試,這里不做解釋。
F.7.13 尚未解決的問題
無
F.8 功能模塊
F.8.1 程序描述
功能模塊主要是對校園固定標記點進行功能信息的采集與標簽化的模塊,通過發布功能系統,采集用戶對標記點的功能模塊化介紹,以及標簽的集成處理,得到對應的功能介紹。
F.8.2 功能
用戶在功能界面,根據界面信息的渲染,對某些標記點的功能信息進行展示。其邏輯為用戶對某特定標記點發出功能列表的請求,向功能表獲取對應的功能列表,然后得到對應信息更新到標記點表中。
如果用戶想要發布某些功能信息,發出發布功能請求,將功能描述更新到功能表中。
功能 | 輸入 | 輸出 | 格式/請求 |
獲取功能列表 | uid locationID dataType | code msg data:[{ functionID: functionCode functioncontent functiondesription: locationID locationLatitud locationLongitude: }] | json/POST |
發布功能 | uid functionCode locationID | code msg uid identity datatype data:[ {functionID functioncontent functiondescription locationID locationdescription locationLatitude locationLongitude}] | json/POST |
F.8.3 性能
運行 | 精度 | 響應時間(ms) |
發布功能 | 根據對應的數據項多少,其性能可能略有些區別 | 200 |
得到功能列表 | 數據庫的表項查詢精度較高,查詢速度響應較快 | 20 |
F.8.4 輸入項
輸入輸出等參考功能F.8.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.8.5 輸出項
輸入輸出等參考功能F.8.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.8.6 算法
F.8.7 流程邏輯
F.8.8 接口
F.8.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.8.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.8.11 限制條件
無
F.8.12 測試計劃
結合網絡模塊、數據庫模塊進行測試
F.8.13 尚未解決的問題
無
F.9 標記點模塊
F.9.1 程序描述
標記點模塊主要負責針對電子科技大學校園地圖界面上出現的標記點進行管理。
F.9.2 功能
地圖界面的展示的所有標記點就是標記點模塊的功能,用戶自動產生查詢所有標記點的請求,標記點模塊根據特定語句查詢標記點表中的所有標記信息,并根據界面顯示需要,渲染出對應的標記點狀態信息。
功能 | 輸入 | 輸出 | 格式、請求 |
獲取所有標記點 | uid dataType: | code msg locationID:[] | json/POST |
F.9.3 性能
運行 | 精度 | 響應時間(ms) |
標記點管理 | 數據庫的表項查詢精度較高,查詢速度響應較快 | 20 |
F.9.4 輸入項
輸入輸出等參考功能F.9.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.9.5 輸出項
輸入輸出等參考功能F.9.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.9.6 算法
F.9.7 流程邏輯
F.9.8 接口
F.9.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.9.10 注釋設計
1. 單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.9.11 限制條件
對于合理的標記點,后臺管理系統必須要有初步審查的過程,管理員手動編輯標記點的合法性,普通用戶無法主動更新及添加合法標記點。
F.9.12 測試計劃
測試名稱 | 值說明 | 輸入方式 |
寫入數據庫 | 1.每個數據表的測試數據應包括:輸入完整,不完整,字段非法等情況 2.多表插入,單表插入 | 自動輸入 |
查詢數據庫的所有標記點 | 多表查詢 | 自動輸入 |
從數據庫刪除非法標記點 | 無 | 自動輸入 |
F.9.13 尚未解決的問題
用戶無法根據實際需要添加更多標記點,后臺管理員系統需要手動編輯合法標記點,提供用戶固定的標記點信息推送。
F.10 微信授權模塊
F.10.1 程序描述
微信授權模塊主要是請求微信用戶的授權,以及得到用戶微信基本信息。基于微信平臺,對用戶進行授權請求,根據登錄憑證校驗請求對用戶進行校驗。根據用戶校驗的自定義登錄態,寫入用戶信息表中。
F.10.2 功能
用戶在微信授權界面,根據微信系統的載入提示,根據啟用協議的憑證驗證請求結果對該小程序的啟用結果進行永久存儲,對得到授權的用戶信息寫入用戶信息表。
功能 | 輸入 | 輸出 | 格式/請求 |
微信登錄 | code encryptedData iv | code、msg、uid uNickName、uavaUrl: | json/POST |
F.10.3 性能
運行 | 精度 | 響應時間(ms) |
微信授權 | 基于微信平臺的認證,對用戶的憑證請求做出正確的響應 | 500 |
F.10.4 輸入項
輸入輸出等參考功能F.10.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.10.5 輸出項
輸入輸出等參考功能F.10.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.10.6 算法
數據簽名校驗方法
為了確保開放接口返回用戶數據的安全性,微信會對明文數據進行簽名。開發者可以根據業務需要對數據包進行簽名校驗,確保數據的完整性。
通過調用接口(如 wx.getUserInfo)獲取數據時,接口會同時返回 rawData、signature,其中 signature = sha1( rawData + session_key )
開發者將 signature、rawData 發送到開發者服務器進行校驗。服務器利用用戶對應的 session_key 使用相同的算法計算出簽名 signature2 ,比對 signature 與 signature2 即可校驗數據的完整性。
如 wx.getUserInfo的數據校驗:
接口返回的rawData:
{undefined
"nickName": "Band",
"gender": 1,
"language": "zh_CN",
"city": "Guangzhou",
"province": "Guangdong",
"country": "CN",
"avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"
}
用戶的 session-key:
HyVFkGl5F5OQWJZZaNzBBg==
用于簽名的字符串為:
{"nickName":"Band","gender":1,"language":"zh_CN","city":"Guangzhou","province":"Guangdong","country":"CN","avatarUrl":"http://wx.qlogo.cn/mmopen/vi_32/1vZvI39NWFQ9XM4LtQpFrQJ1xlgZxx3w7bQxKARol6503Iuswjjn6nIGBiaycAjAtpujxyzYsrztuuICqIM5ibXQ/0"}HyVFkGl5F5OQWJZZaNzBBg==
使用sha1得到的結果為
75e81ceda165f4ffa64f4068af58c64b8f54b88c
加密數據解密算法:
接口如果涉及敏感數據(如wx.getUserInfo當中的 openId 和 unionId),接口的明文內容將不包含這些敏感數據。如需要獲取敏感數據,需要對接口返回的加密數據(encryptedData) 進行對稱解密。 解密算法如下:
(1)對稱解密使用的算法為 AES-128-CBC,數據采用PKCS#7填充。
(2)對稱解密的目標密文為 Base64_Decode(encryptedData)。
(3)對稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是 16字節。
(4)對稱解密算法初始向量 為Base64_Decode(iv),其中iv由數據接口返 回。
F.10.7 流程邏輯
F.10.8 接口
F.10.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.10.10 注釋設計
1.單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.10.11 限制條件
如需獲取用戶頭像、昵稱等信息,會彈出登錄彈窗引導用戶授權,開發者在交互設計上兼容彈窗,避免出現多個彈窗疊加、重復提示等不好的體驗。
F.10.12 測試計劃
測試名稱 | 值說明 | 輸入方式 |
請求微信服務器(服務器網絡模塊) | 客戶端從微信獲取的code 和加密數據 | 自動輸入 |
F.10.13 尚未解決的問題
無
F.11 校園身份認證模塊
F.11.1 程序描述
校園身份認證模塊主要是對校園用戶的身份進行認證,基于電子科技大學信息門戶平臺,對學生以及教職工進行認證,根據認證結果對用戶提供對應服務。根據實際用戶身份的認證狀態,寫入用戶信息表中。
F.11.2 功能
用戶在校園身份認證界面,提供對應正確的學號以及密碼,小程序的認證模塊基于電子科大的信息門戶系統,對其輸入身份信息進行驗證,根據認證結果對用戶提供對應的服務,并將其認證結果寫進用戶信息表。
功能 | 輸入 | 輸出 | 格式/請求 |
校園身份認證 | openid、學號、密碼 | code、msg identity | json/POST |
F.11.3 性能
運行 | 精度 | 響應時間(ms) |
校園身份認證 | 基于電子科大信息門戶的認證精度,對正確的學號及密碼能夠正確認證 | 1000 |
F.11.4 輸入項
輸入輸出等參考功能F.11.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.11.5 輸出項
輸入輸出等參考功能F.11.2;
安全保密:對請求數據進行簽名,防止非法請求和重放攻擊,同時,對用戶敏感數據進行加密;
F.11.6 算法
用戶密碼加密算法采用AES對稱加密,加密流程如下:
解密流程(encryptedData 為加密數據):
(1)對稱解密使用的算法為 AES-128-CBC,數據采用PKCS#7填充。
(2)對稱解密的目標密文為 Base64_Decode(encryptedData)。
(3)對稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是 16字節。
(4)對稱解密算法初始向量 為Base64_Decode(iv),其中iv由數據接口返 回。
F.11.7 流程邏輯
F.11.8 接口
F.11.9 存儲分配
軟件 | 存儲分配 | 備注 |
客戶端 | 內存:500KB(<=2MB),本地存儲:10MB | 微信限制 |
數據庫 | 內存:1GB; 硬盤:50GB | 適當情況下可擴容 |
F.11.10 注釋設計
1.單行注釋(single-line)://注釋內容
一次只能注釋一行,一般是簡單注釋,用來簡短描述某個變量或屬性,程序塊。
2.塊注釋(block):/*注釋內容*/
為了進行多行簡單注釋,一般不使用。
3.文檔注釋:/**注釋內容 */
/**
* projectName: xxx
* fileName: xxx
* packageName: xxxx
* date: 2019年6月18日下午12:28:39
* copyright(c) 2019-2020 xxx
*/
4.類注釋
類注釋(Class)主要用來聲明該類用來做什么,以及創建者、創建日期版本、包名等一些信息:
/**
* @version: V1.0
* @author: Lulusimili
* @className: user
* @packageName: user
* @description: 這是用戶類
* @data: 2019-06-28 12:20
**/
5.方法注釋
方法注釋(Methods)主要用來聲明該類的作用、入參、返回值、異常等信息:
/**
* @version: V1.0
* @author: Lulusimili
* @methodsName: addUser
* @description: 添加用戶
* @param: xxxx
* @return: String
* @throws: IOException
**/
F.11.11 限制條件
需要根據電子科技大學信息門戶驗證系統保持一致,如果電子科技大學信息門戶驗證界面有部分更新(如多次輸入后,可能需要用戶輸入圖片驗證碼),小程序的校園身份認證模塊也要及時更新。
F.11.12 測試計劃
測試名稱 | 輸入項 | 輸入方式 | 結果 | 說明 |
請求電子科技大學信息門戶驗證平臺 | 學號或工號,密碼 | 手動輸入 | 驗證成功 | 無 |
多次請求電子科技大學信息門戶驗證平臺 | 學號或工號,密碼,驗證碼 | 手動輸入 | 驗證成功 | 多次輸入錯誤,強制輸入圖片驗證碼 |
F.11.13 尚未解決的問題
無
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計