本文就拿一個(gè)簡(jiǎn)單的分層架構(gòu)例子來(lái)做樣板。樣板程序的名稱為“XX文章系統(tǒng)”,系統(tǒng)使用了STRUTS框架,和安全有關(guān)的層分為: “DB層”,這一層存放了鏈接數(shù)據(jù)庫(kù)的字符串,以及JdbcTemplate類,直接訪問(wèn)數(shù)據(jù)庫(kù)。因?yàn)樵趈ava中,執(zhí)行SQL語(yǔ)句的函數(shù)按照返回值可以分為三類,所以在這一層定義了JDBC模版類(JdbcTemplate),每一次使用操作數(shù)據(jù)庫(kù)時(shí)都要執(zhí)行這一層的三個(gè)方法其中一個(gè)。 “DAO層(Data Access Object數(shù)據(jù)訪問(wèn)對(duì)象層)”,從安全角度上看,這一層存放了SQL語(yǔ)句(并不執(zhí)行SQL語(yǔ)句,語(yǔ)句傳給DB層執(zhí)行)。這一層調(diào)用“DB層”訪問(wèn)數(shù)據(jù)庫(kù),它只知道“DB層”的存在,不知道數(shù)據(jù)庫(kù)的存在。 “SERVICE層”,業(yè)務(wù)邏輯層,因?yàn)橐粋€(gè)業(yè)務(wù)的實(shí)現(xiàn),并不是一次數(shù)據(jù)庫(kù)訪問(wèn)就可以完成的,所以這一層通過(guò)N次調(diào)用“DAO層的方法”實(shí)現(xiàn)業(yè)務(wù)邏輯,它只知道“DAO層”的存在,不知道“DB層”和數(shù)據(jù)庫(kù)的存在。 “ACTION層”,調(diào)用業(yè)務(wù)邏輯層,根據(jù)返回的結(jié)果,控制JSP頁(yè)面顯示。它只知道業(yè)務(wù)層的存在。這一層是入侵者的攻擊平臺(tái)。 “Form層”,把用戶POST提交的信息封裝成Form對(duì)象,經(jīng)過(guò)驗(yàn)證后提交給ACTION層處理。 “JSP層”(顯示層),這一層是最終顯示給用戶看的頁(yè)面,同時(shí)也是入侵者的攻擊平臺(tái)。 用戶通過(guò)訪問(wèn)ACTION層,自動(dòng)會(huì)發(fā)生:“ACTION調(diào)用SERVICE,SERVICE調(diào)用DAO,DAO調(diào)用DB,DB執(zhí)行SQL語(yǔ)句返回結(jié)果給 DAO,DAO返回給SERVICE,SERVICE返回給ACTION,ACTION把數(shù)據(jù)顯示到JSP里返回給用戶”。 |
聯(lián)系客服