2024 年“中銀杯”甘肅省職業(yè)院校技能大賽-高職學(xué)生組-電子與信息大類-區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)樣題3_第1頁
2024 年“中銀杯”甘肅省職業(yè)院校技能大賽-高職學(xué)生組-電子與信息大類-區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)樣題3_第2頁
2024 年“中銀杯”甘肅省職業(yè)院校技能大賽-高職學(xué)生組-電子與信息大類-區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)樣題3_第3頁
2024 年“中銀杯”甘肅省職業(yè)院校技能大賽-高職學(xué)生組-電子與信息大類-區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)樣題3_第4頁
2024 年“中銀杯”甘肅省職業(yè)院校技能大賽-高職學(xué)生組-電子與信息大類-區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)樣題3_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2024年“中銀杯”甘肅省職業(yè)院校技能大賽

高職學(xué)生組電子與信息大類

區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)競賽樣題(3)

背景描述

電子簽章可實(shí)現(xiàn)與紙質(zhì)文件蓋章操作相似的可視效果,以保障數(shù)

據(jù)來源的真實(shí)性、數(shù)據(jù)完整性以及簽名人行為的不可否認(rèn)性。

傳統(tǒng)的電子簽章系統(tǒng)是基于中心化的,也就是數(shù)據(jù)是集中存儲在

中心數(shù)據(jù)庫中,這就導(dǎo)致傳統(tǒng)電子簽章使用記錄存在被篡改、偽造的

風(fēng)險(xiǎn)。

而區(qū)塊鏈電子簽章系統(tǒng)在傳統(tǒng)電子簽章系統(tǒng)的基礎(chǔ)上,可以借助

于區(qū)塊鏈技術(shù),用不可篡改、不可抵賴的方式記錄電子簽章的整個流

轉(zhuǎn)過程,如領(lǐng)取、使用、查詢等,從而解決傳統(tǒng)電子簽章系統(tǒng)存在的

潛在風(fēng)險(xiǎn)。

某市政務(wù)部分?jǐn)M開發(fā)一款區(qū)塊鏈電子簽章系統(tǒng),該區(qū)塊鏈電子簽

章系統(tǒng)包含為印章使用者、監(jiān)管、平臺運(yùn)營方的管理功能,場景開放

平臺,印章底層引擎,和區(qū)塊鏈基座。場景開放平臺面向各類政務(wù)系

統(tǒng)與第三方電子簽名服務(wù)商提供電子簽章相關(guān)的開放能力。場景開放

平臺對上提供相關(guān)的基礎(chǔ)能力,對下連接區(qū)塊鏈基座。

1

模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計(jì)及系統(tǒng)運(yùn)維(35分)

任務(wù)1-1:區(qū)塊鏈系統(tǒng)部署與運(yùn)維(25分)

圍繞電子簽章區(qū)塊鏈平臺部署與運(yùn)維需求,進(jìn)行項(xiàng)目相關(guān)系統(tǒng)、節(jié)點(diǎn)以及管

理工具的部署工作。通過通過監(jiān)控工具完成對網(wǎng)絡(luò)、節(jié)點(diǎn)服務(wù)的監(jiān)控。最終利用

業(yè)務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點(diǎn)服務(wù)等系統(tǒng)結(jié)構(gòu)維護(hù)。

1.登陸Linux服務(wù)器,安裝并部署下圖所示的單機(jī)、四機(jī)構(gòu)、三群組、八

節(jié)點(diǎn)的星形組網(wǎng)拓?fù)鋮^(qū)塊鏈系統(tǒng);

2.登陸Linux服務(wù)器,安裝并部署區(qū)塊鏈系統(tǒng)控制臺,檢查部署控制臺是

否正常運(yùn)行;

3.登錄Linux服務(wù)器,部署區(qū)塊鏈管理前置平臺;

4.登陸Linux服務(wù)器,使用終端生成新的節(jié)點(diǎn),并且將該節(jié)點(diǎn)加入對應(yīng)群

組然后啟動節(jié)點(diǎn)。

子任務(wù)1-2-1:登陸Linux服務(wù)器,安裝并部署下圖所示的單機(jī)、四機(jī)構(gòu)、三

群組、八節(jié)點(diǎn)的星形組網(wǎng)拓?fù)鋮^(qū)塊鏈系統(tǒng),具體工作內(nèi)容如下:

搭建部署多群組聯(lián)盟鏈并啟動所有節(jié)點(diǎn);

通過命令驗(yàn)證區(qū)塊鏈節(jié)點(diǎn)進(jìn)程運(yùn)行狀況;

通過命令驗(yàn)證區(qū)塊鏈連接狀態(tài)和共識狀態(tài)日志輸出。

子任務(wù)1-2-2:登陸Linux服務(wù)器,安裝并部署區(qū)塊鏈系統(tǒng)控制臺,檢查部署控

制臺是否正常運(yùn)行,具體工作內(nèi)容如下:

解壓控制臺安裝包并拷貝配置文件到當(dāng)前目錄;

配置控制臺證書;

啟動控制臺;

驗(yàn)證控制臺是否正常運(yùn)行。

子任務(wù)1-2-3:登錄Linux服務(wù)器,部署區(qū)塊鏈管理前置平臺,具體內(nèi)容如下

解壓平臺操作對應(yīng)安裝包;

配置秘鑰文件并檢查前置平臺啟動情況;

查看日志以及查看中間件進(jìn)程;

2

檢查進(jìn)程端口以及訪問服務(wù)。

子任務(wù)1-2-4:登陸Linux服務(wù)器,使用終端生成新的節(jié)點(diǎn),并且將該節(jié)點(diǎn)

加入對應(yīng)群組然后啟動節(jié)點(diǎn),具體內(nèi)容如下:

生成新節(jié)點(diǎn),修改新節(jié)點(diǎn)配置;

啟動新節(jié)點(diǎn),并查看節(jié)點(diǎn)的nodeid;

將新節(jié)點(diǎn)作為觀察節(jié)點(diǎn)加入群組1當(dāng)中,并檢查是否加入成功。

任務(wù)1-2:區(qū)塊鏈系統(tǒng)測試(10分)

設(shè)計(jì)對區(qū)塊鏈系統(tǒng)的測試流程;結(jié)合實(shí)際業(yè)務(wù)需求,調(diào)用部署的智能合約中

進(jìn)行系統(tǒng)測試、性能測試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安

全漏洞。利用模擬業(yè)務(wù)和測試工具來完成對區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測試。

1.基于給定腳本完成區(qū)塊鏈管理平臺部署以及結(jié)果驗(yàn)證,最后將執(zhí)行結(jié)

果截圖保存。

實(shí)現(xiàn)區(qū)塊鏈管理平臺部署;

實(shí)現(xiàn)管理平臺啟動情況驗(yàn)證;

驗(yàn)證身份認(rèn)證進(jìn)程啟動情況驗(yàn)證和瀏覽器驗(yàn)證。

2.智能合約安全漏洞測試。

有如下智能合約:

pragmasolidity^0.8.3;

contractEtherGame{

uintpublictargetAmount=7ether;

addresspublicwinner;

functiondeposit()publicpayable{

require(msg.value==1ether,"Youcanonlysend1Ether");

uintbalance=address(this).balance;

require(balance<=targetAmount,"Gameisover");

if(balance==targetAmount){

winner=msg.sender;

}

}

3

functionclaimReward()public{

require(msg.sender==winner,"Notwinner");

(boolsent,)=msg.sender.call{value:address(this).balance}("");

require(sent,"FailedtosendEther");

}

}

contractAttack{

EtherGameetherGame;

constructor(EtherGame_etherGame){

etherGame=EtherGame(_etherGame);

}

functionattack()publicpayable{

addresspayableaddr=payable(address(etherGame));

selfdestruct(addr);

}

}

分析智能合約中存在問題,并說明危害;

創(chuàng)建新的智能合約,修復(fù)其中問題;

說明修復(fù)內(nèi)容并測試其智能合約。

4

模塊二:智能合約開發(fā)與測試(30分)

選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計(jì)結(jié)果、運(yùn)行代碼、運(yùn)行結(jié)果等截圖

粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊二提交結(jié)果.docx】

中對應(yīng)的任務(wù)序號下。

任務(wù)2-1:智能合約開發(fā)(20分)

使用Solidity語言完成智能合約開發(fā)、部署和調(diào)用,要求如下:

1.個人簽章信息接口編碼

(1)編寫個人簽章智能合約的實(shí)體接口,完成實(shí)體通用數(shù)據(jù)的初始化,實(shí)

現(xiàn)簽章和用戶實(shí)體信息上鏈的功能;

structSealInfo{

//①姓名

//②身份證

//③印章數(shù)據(jù)

//④創(chuàng)建印章時間戳

}

(2)編寫簽章信息上鏈的接口,實(shí)現(xiàn)Seal合約的構(gòu)造函數(shù);

//@dev構(gòu)造函數(shù)

//@param_name姓名

//@param_cardId身份證號碼

//@param_data個人印章數(shù)據(jù)

//@param_datetime賬戶注冊時間

constructor(string_name,string_cardId,string_data,string

_datetime)public{

//①用戶姓名

//②用戶身份ID

//③用戶數(shù)據(jù)

//④時間戳

isUsed=true;

5

}

(3)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約判斷多

人簽章文件編號是否存在的函數(shù)。

//@dev判斷多人簽名文件編號是否存在

//@param_code簽章文件編號

//@returnbooltrue:存在false:不存在

functionisExistMultiCode(string_code)viewinternal

returns(bool){

//①遍歷所有多人簽章文件編號并與傳入簽章文件編號參數(shù)進(jìn)行比較

//②返回不存在

}

2.電子印章接口編碼(8分)

(1)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約獲取

多人簽章信息函數(shù)(3分)

//@dev獲取多人簽章信息

//@param_code簽章文件編號

//@return(簽章文件摘要、多人簽章發(fā)起人賬戶地址、簽章文件編號、

簽章人數(shù)、簽章賬戶地址列表)

functiongetMultiSingInfo(string_code)publicview

onlyPromoterOrSingerreturns(string,address,string,uint,address[]

memory){

//①獲取多人簽章合約對象實(shí)例

//②返回多人簽章信息

}

(2)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約多人簽

章函數(shù)(5分)

//@dev多人簽章

//@param_address簽章人賬戶地址

6

//@param_hash簽章文件摘要

//@param_datatime簽章時間戳

functiondoMultiSign(address_address,string_hash,string

_datetime)publiconlyPromoter{

//①判斷傳入的簽章人賬戶地址不能為空

//②獲取多人簽章合約對象實(shí)例

//③獲取當(dāng)前等待簽章賬戶地址

//④判斷合約調(diào)用者是否為等待簽章人賬戶地址

//⑤進(jìn)行簽章

}

3.合約編譯、部署和調(diào)用

(1)解決代碼錯誤和警告,正確編譯并部署合約,成功獲取部署的合約地

址和abi;

(2)調(diào)用區(qū)塊鏈電子簽章智能合約的接口,完整驗(yàn)證業(yè)務(wù)流程。

任務(wù)2-2:智能合約測試(10分)

根據(jù)已完成的智能合約,針對開發(fā)功能開展相關(guān)合約測試工作,具體工作內(nèi)

容如下:

1.生成測試文件,在Remix中的合約測試目錄tests中生成

ElectionSeal_Test.sol的測試文件

編譯并部署合約,配置項(xiàng)目的ElectionSeal_Test.sol測試腳本文件。

2.注釋測試文件中自動生成的測試函數(shù)checkSuccess()、

checkSuccess2()、checkFailure()、checkSenderAndValue()相關(guān)代碼,運(yùn)行測

試按鈕

基于remix的測試項(xiàng)目,將checkSuccess()、checkSuccess2()、

checkFailure()、checkSenderAndValue()相關(guān)代碼注釋掉并進(jìn)行相關(guān)測試;

3.實(shí)例化

在測試文件中定義測試ElectronicSeal合約變量并在beforeAll()函數(shù)中

進(jìn)行實(shí)例化。

4.創(chuàng)建測試函數(shù)測試印章賬戶數(shù)量

7

基于remix的測試項(xiàng)目,補(bǔ)全位于test文件夾中的ElectionSeal_Test.sol

合約測試文件,添加測試用例,補(bǔ)全測試印章賬戶數(shù)量函數(shù)。

5.創(chuàng)建測試函數(shù)測試印章賬戶簽章

基于remix的測試項(xiàng)目,補(bǔ)全位于test文件夾中ElectionSeal_Test.sol

合約測試文件,添加測試用例,創(chuàng)建測試函數(shù)測試印章賬戶簽章。

8

模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)(30分)

任務(wù)3-1:區(qū)塊鏈電子簽章前端功能開發(fā)(10分)

1.請基于前端系統(tǒng)的開發(fā)模板,在注冊頁面register.html文件中添加對

應(yīng)的代碼邏輯,實(shí)現(xiàn)對前端系統(tǒng)的注冊功能,并測試功能完整性,示例頁面如

下;

題目的具體要求如下:

(1)注冊身份證號碼的數(shù)據(jù)實(shí)現(xiàn)雙向綁定

(2)注冊按鈕的事件綁定

(3)將用戶輸入的注冊信息向后端系統(tǒng)發(fā)送注冊請求

register.html

代碼片段1:

<divclass="input-group"style="width:80%">

<spanclass="input-group-addonglyphiconglyphicon-list-alt"

id="basic-addon1"></span>

<inputtype="text"class="form-control"placeholder="身份證號碼

(必填)"autocomplete="off"選手填寫部分>

</div><br/>

代碼片段2:

<divclass="modal-footer"style="margin-left:150px;">

9

<divclass="form-group"style="width:50%">

<!--TODO:請補(bǔ)充注冊按鈕的事件綁定代碼-->

<buttontype="button"class="btnbtn-success

form-control"選手填寫部分>確定</button>

</div>

</div>

代碼片段3:

methods:{

submit(){

if(this.user.username==''){

alert("用戶名不能為空")

return

}

if(this.user.password==''){

alert("密碼不能為空")

return

}

if(this.user.chainAccount==''){

alert("區(qū)塊鏈賬戶地址不能為空")

return

}

if(==''){

alert("姓名不能為空")

return

}

if(this.user.cardId==''){

alert("身份證號碼不能為空")

return

10

}

if(this.user.phone==''){

alert("電話號碼不能為空")

return

}

選手填寫部分

}

}

2.請基于前端系統(tǒng)的開發(fā)模板,在登錄頁面login.html文件中添加對應(yīng)

的代碼邏輯,實(shí)現(xiàn)對前端系統(tǒng)的登錄功能,并測試功能完整性,示例頁面如下:

本題目的具體要求如下:

(1)登錄按鈕的事件綁定

(2)用戶輸入的登錄用戶名和密碼通過雙向綁定存放在user中

(3)登錄成功頁面跳轉(zhuǎn)到main.html頁面

(4)本地保存登錄狀態(tài)信息(token)

login.html

代碼片段1:

<divclass="modal-footer"style="margin-left:100px;">

<divclass="form-group"style="width:75%">

<buttontype="button"class="btnbtn-primary

form-control"選手填寫部分>確定</button>

</div>

</div>

11

代碼片段2:

//創(chuàng)建Vue實(shí)例

newVue({

el:'#app',//el用于指定當(dāng)前Vue實(shí)例為哪個容器服務(wù),值通常

為css選擇器字符串

data:{//data中用于存儲數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,

值我們暫時先寫成一個對象。

user:{

選手填寫部分

},

tip:false,

msg:""

},

methods:{

submit(){

if(this.user.username==''){

this.msg="用戶名不能為空"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

return

}

if(this.user.password==''){

this.msg="密碼不能為空"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

12

return

}

axios.post("http://localhost/user/login",

this.user).then(response=>{

if(response.data.resultCode==200){

this.msg="登錄成功"

this.tip=true

setTimeout(()=>{

選手填寫部分

},1000)

選手填寫部分

}else{

this.msg="登錄失敗"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

}

})

},

}

})

3.請基于前端系統(tǒng)的開發(fā)模板,在個人印章頁面myseal.html文件中添加對

應(yīng)的頁面代碼邏輯,實(shí)現(xiàn)對前端系統(tǒng)的個人印章功能,并測試功能完整性,示例

頁面如下:

13

具體要求如下:

(1)注銷按鈕的事件綁定

(2)注銷時清除本地保存的登錄狀態(tài)信息(token)

(3)發(fā)送請求到后端系統(tǒng)攜帶本地保存的登錄狀態(tài)信息(token)

(4)接收后端系統(tǒng)發(fā)送過來的印章圖片信息

myseal.html

代碼片段1:

<divclass="container-fluid">

<divclass="navbar-header">

<aclass="navbar-brand"href="#"><imgalt="Brand"

src="../images/logo.png"style="height:50px;"></a>

</div>

<imgalt="Brand"src="../images/main.png"style="height:

40px;margin-top:20px;">

<ulclass="navnavbar-nav"style="float:right;">

<li><ahref="../index.html"><buttontype="button"

class="btnbtn-success"選手填寫部分>注銷</button></a></li>

</ul>

</div>

代碼片段2:

methods:{

logout(){

選手填寫部分

}

14

},

代碼片段3:

//請求發(fā)前攔截,header中添加token

erceptors.request.use(config=>{

config.headers.Authorization=選手填寫部分

returnconfig

})

代碼片段4:

axios.get("http://localhost/user/seal").then(response=>{

if(response.data.resultCode==200){

this.seal=選手填寫部分

}

})

4.請基于前端系統(tǒng)的開發(fā)模板,請?jiān)谖募炚马撁鎠ignature.html文件中

添加對應(yīng)的頁面代碼邏輯,實(shí)現(xiàn)對前端系統(tǒng)的文件簽章業(yè)務(wù)功能,并測試功能完

整性,示例頁面如下:

具體要求如下:

(1)創(chuàng)建canvas畫布實(shí)例

(2)向后端系統(tǒng)發(fā)送簽章請求url

(3)向后端系統(tǒng)獲取個人印章請求url

(4)接收后端系統(tǒng)發(fā)送過來的印章圖片信息

signature.html

15

代碼片段1:

signature(){

if(this.status==0){

this.msg="請上傳文檔"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

return

}

this.status=2

varcanvas;

canvas=選手填寫部分

canvas.width=$("#poster").width()

canvas.height=$("#poster").height()

varcontext=canvas.getContext("2d");

context.rect(0,0,canvas.width,canvas.height);

context.fillStyle="#fff";

context.fill();

代碼片段2:

uploadSeal(){

if(this.status!=2){

this.msg="文檔未上傳或未簽章"

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

16

return

}

varposterImg=document.getElementById('poster');

varimgBase64=posterImg.getAttribute("src");

axios.post("選手填寫部分",

{

"filename":this.filename,

"imgBase64":imgBase64,

}

).then(response=>{

if(response.data.resultCode==200){

this.msg="簽章文檔上鏈成功"

this.tip=true

setTimeout(()=>{

this.tip=false

window.location.href="main.html";

},1000)

}else{

this.msg="簽章文檔上鏈?zhǔn)?

this.tip=true

setTimeout(()=>{

this.tip=false

},1000)

}

})

}

代碼片段3:

mounted(){

17

//請求發(fā)前攔截,header中添加token

erceptors.request.use(request=>{

request.headers.Authorization=

localStorage.getItem("Authorization")

returnrequest

})

//響應(yīng)攔截器(認(rèn)證授權(quán))

erceptors.response.use(response=>{

if(response.data.resultCode==401){

//跳轉(zhuǎn)頁面

window.location.href="login.html";

}

returnresponse

})

//TODO:【5-1-4-3】請補(bǔ)充向服務(wù)器發(fā)送獲取個人印章請求代碼

axios.get("選手填寫部分").then(response=>{

if(response.data.resultCode==200){

this.seal=選手填寫部分

}

})

}

5.請基于前端系統(tǒng)的開發(fā)模板,在文件驗(yàn)章頁面verity.html文件中添加

對應(yīng)的頁面代碼邏輯,實(shí)現(xiàn)對前端系統(tǒng)的文件驗(yàn)章業(yè)務(wù)功能,并測試功能完整

性,示例頁面如下:

18

具體要求如下:

(1)將驗(yàn)章結(jié)果數(shù)據(jù)顯示在頁面中

(2)向后端系統(tǒng)發(fā)送驗(yàn)章請求并攜帶驗(yàn)章文件數(shù)據(jù)

verity.html

代碼片段1:

<divclass="modal-dialog"role="document">

<divclass="modal-content">

<divclass="modal-header">

<buttontype="button"class="close"

data-dismiss="modal"aria-label="Close"><span

aria-hidden="true">×</span></button>

<h4class="modal-title"

id="myModalLabel">簽章信息</h4>

</div>

<divclass="modal-body">

<pstyle="margin-left:50px;">

<label>姓名:</label>選手填寫部

</p>

<pstyle="margin-left:50px;">

<label>身份證號碼:</label>選手

填寫部分

19

</p>

<pstyle="margin-left:50px;">

<label>區(qū)塊鏈賬戶地址:</label>

選手填寫部分

</p>

<pstyle="margin-left:50px;">

<label>文件名稱:</label>選手填

寫部分

</p>

<pstyle="margin-left:50px;">

<label>文件編碼:</label>選手填

寫部分

</p>

<pstyle="margin-left:50px;">

<label>簽章時間:</label>選手填

寫部分

</p>

</div>

<divclass="modal-footer"style="width:

300px;">

<buttontype="button"class="btn

btn-success"data-dismiss="modal"@click="finish">確定</button>

</div>

</div>

</div>

代碼片段2:

asyncverify(event){//同步發(fā)送axios請求(獲取數(shù)據(jù)后彈出模態(tài)框)

if(this.status==0){

this.msg="請上傳文檔"

this.tip=true

20

event.stopPropagation()//阻止事件冒泡(防止彈出

模態(tài)框)

setTimeout(()=>{

this.tip=false

},1000)

return

}

awaitaxios.post("選手填寫部分",

{"imgBase64":this.contract}).then(response=>{

if(response.data.resultCode==200){

this.verifyInfo=response.data.data

}

})

},

任務(wù)3-2:區(qū)塊鏈應(yīng)用系統(tǒng)后端開發(fā)(20分)

1.請基于后端系統(tǒng)的開發(fā)模板,在userService.java文件中補(bǔ)充對應(yīng)的

代碼邏輯,完成后端代碼邏輯,實(shí)現(xiàn)對后端系統(tǒng)的注冊功能,并測試功能完整

性,題目具體要求如下:

(1)根據(jù)用戶注冊信息中的用戶名和賬戶地址從數(shù)據(jù)庫中查詢賬戶信息是否

存在

(2)將用戶密碼進(jìn)行md5加密操作

(3)將電子印章字節(jié)數(shù)組轉(zhuǎn)為字符串

(4)將用戶注冊信息寫入數(shù)據(jù)庫匯總

userService.java

代碼片段1:

publicbooleanregister(RegisterBeanregisterBean){

21

//校驗(yàn)用戶名或賬戶地址是否重復(fù)

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

queryWrapper.eq("username",registerBean.getUsername())

.or().eq("chain_account",registerBean.getChainAccou

nt());

UserEntityuserOne=選手填寫部分

if(userOne!=null){

("注冊失?。河脩裘蛸~戶地址重復(fù)");

returnfalse;

}

//拷貝對象

UserEntityuserEntity=newUserEntity();

BeanUtils.copyProperties(registerBean,userEntity);

userEntity.setPassword(選手填寫部分);//md5加密密碼

//生成印章(Base64)

byte[]buffer=Seal.getSealImg(registerBean.getUsername(),

registerBean.getName());

Encoderencode=Base64.getEncoder();

StringsealImg=選手填寫部分

userEntity.setSealImg(sealImg);

//用戶注冊信息上鏈

ListfuncParams=newArrayList<>();

funcParams.add(registerBean.getChainAccount());

22

funcParams.add(registerBean.getName());

funcParams.add(registerBean.getCardId());

funcParams.add(String.valueOf(System.currentTimeMillis()));

JSONObjectres=HttpUtils.writeContract("addSealAccount",

funcParams);

if(res==null){

("注冊失?。河脩糇孕畔⑸湘?zhǔn)?);

returnfalse;

}

intresult=選手填寫部分

returnresult>0?true:false;

}

2.請基于后端系統(tǒng)的開發(fā)模板,補(bǔ)充代碼完成對應(yīng)的后端代碼邏輯,實(shí)現(xiàn)

后端系統(tǒng)的登錄功能,并測試功能完整性,具體要求如下:

(1)登錄成功向前端系統(tǒng)返回登錄狀態(tài)信息(token)

(2)添加登錄的用戶名和密碼兩個數(shù)據(jù)庫查詢條件

(3)根據(jù)登錄的用戶名和密碼到數(shù)據(jù)庫中進(jìn)行查詢操作

UserController.java

代碼片段1:

publicAjaxResult<String>login(@RequestBodyLoginBeanloginBean){

(loginBean.toString());

if(userService.isLogin(loginBean)){

//創(chuàng)建

Stringtoken=

TokenUtil.sign(loginBean.getUsername(),String.valueOf(System.curren

tTimeMillis()));

AjaxResult<String>result=newAjaxResult<>(200,"login

23

ok");

result.setData(選手填寫部分);

returnresult;

}else{

returnnewAjaxResult<String>(403,"loginfail");

}

}

UserService.java

代碼片段1:

publicbooleanisLogin(LoginBeanloginBean){

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

loginBean.setPassword(SecureUtil.md5(loginBean.getPassword()));//md

5加密密碼

//TODO:請補(bǔ)充queryWrapper添加用戶名和密碼兩個數(shù)據(jù)庫查詢條

件代碼

queryWrapper.eq(選手填寫部分)

.eq(選手填寫部分);

//TODO:請補(bǔ)充數(shù)據(jù)庫查詢登錄用戶信息代碼

UserEntityuserEntity=選手填寫部分

returnuserEntity!=null?true:false;

}

3.請基于后端系統(tǒng)的開發(fā)模板,補(bǔ)充代碼完成對應(yīng)的后端代碼邏輯,實(shí)現(xiàn)

對后端系統(tǒng)的賬戶信息查看功能,并測試功能完整性,具體要求如下:

24

(1)從前端系統(tǒng)發(fā)送的請求頭中獲取登錄狀態(tài)信息(token)

(2)根據(jù)登錄狀態(tài)信息(token)獲取登錄用戶名

(3)根據(jù)用戶名查詢數(shù)據(jù)庫

(4)將查詢結(jié)果數(shù)據(jù)封裝到RegisterBean中

UserController.java

代碼片段1:

@ApiOperation(value="用戶信息",notes="獲取用戶詳細(xì)信息")

@GetMapping("/user/info")

publicAjaxResult<RegisterBean>getUserInfo(HttpServletRequest

request){

Stringtoken=選手填寫部分

Stringusername=選手填寫部分

RegisterBeanregisterBean=userService.getUser(username);

AjaxResult<RegisterBean>result=newAjaxResult<>(200,

"ok");

result.setData(registerBean);

returnresult;

}

UserService.java

代碼片段1:

publicRegisterBeangetUser(Stringusername){

QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();

queryWrapper.eq("username",username);

UserEntityuserEntity=選手填寫部分

RegisterBeanregisterBean=newRegisterBean();

25

選手填寫部分

returnregisterBean;

}

4.請基于后端系統(tǒng)的開發(fā)模板,補(bǔ)充代碼完成對應(yīng)的后端代碼邏輯,實(shí)現(xiàn)

對后端系統(tǒng)的文件簽章功能,并測試功能完整性,具體要求如下:

(1)驗(yàn)證登錄狀態(tài)信息(token)

(2)獲取簽章文件的UUID編碼

(3)獲取驗(yàn)章文件摘要(hash)

(4)將驗(yàn)章文件信息寫入智能合約中

TokenInterceptor.java

代碼片段1:

publicbooleanpreHandle(HttpServletRequestrequest,

HttpServletResponseresponse,Objecthandler)throwsException{

if("OPTIONS".equals(request.getMethod())){

response.setStatus(HttpServletResponse.SC_OK);

returntrue;

}

response.setCharacterEncoding("utf-8");

Stringtoken=request.getHeader("Authorization");

("token:"+token);

if(token!=null){

booleanresult=選手填寫部分

if(result){

("通過攔截器");

returntrue;

26

}

}

response.setCharacterEncoding("UTF-8");

response.setContentType("application/json;charset=utf-8");

PrintWriterout=null;

try{

JSONObjectjson=newJSONObject();

json.put("message","認(rèn)證失敗,未通過攔截器");

json.put("resultCode","401");

response.getWriter().append(json.toJSONString());

("認(rèn)證失敗,未通過攔截器");

}catch(Exceptione){

e.printStackTrace();

response.sendError(500);

returnfalse;

}

returnfalse;

}

SealService.java

代碼片段1:

publicbooleansignature(ContractBeancontractBean,String

chainAccount){

//獲取簽名文檔uuid編碼

Stringcode=選手填寫部分

SealEntitysealEntity=newSealEntity();

BeanUtils.copyProperties(contractBean,sealEntity);

String[]str=contractBean.getFilename().split("\\.");

sealEntity.setFilename(str[0]);

27

sealEntity.setType(str[1]);

sealEntity.setCode(code);

//簽章記錄上鏈

try{

//獲取印章文檔Hash值

MessageDigestmessageDigest=選手填寫部分

byte[]bytes=

messageDigest.digest(contractBean.getImgBase64().getBytes("UTF-8"))

;

Stringhash=Hex.toHexString

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論