GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題第5套-2023年全國職業(yè)院校技能大賽擬設(shè)賽項賽題_第1頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題第5套-2023年全國職業(yè)院校技能大賽擬設(shè)賽項賽題_第2頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題第5套-2023年全國職業(yè)院校技能大賽擬設(shè)賽項賽題_第3頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題第5套-2023年全國職業(yè)院校技能大賽擬設(shè)賽項賽題_第4頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題第5套-2023年全國職業(yè)院校技能大賽擬設(shè)賽項賽題_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年全國職業(yè)院校技能大賽高職組“區(qū)塊鏈技術(shù)應(yīng)用”賽項賽卷(5卷)任務(wù)書參賽隊編號:背景描述電子簽章可實現(xiàn)與紙質(zhì)文件蓋章操作相似的可視效果,以保障數(shù)據(jù)來源的真實性、數(shù)據(jù)完整性以及簽名人行為的不可否認(rèn)性。傳統(tǒng)的電子簽章系統(tǒng)是基于中心化的,也就是數(shù)據(jù)是集中存儲在中心數(shù)據(jù)庫中,這就導(dǎo)致傳統(tǒng)電子簽章使用記錄存在被篡改、偽造的風(fēng)險。而區(qū)塊鏈電子簽章系統(tǒng)在傳統(tǒng)電子簽章系統(tǒng)的基礎(chǔ)上,可以借助于區(qū)塊鏈技術(shù),用不可篡改、不可抵賴的方式記錄電子簽章的整個流轉(zhuǎn)過程,如領(lǐng)取、使用、查詢等,從而解決傳統(tǒng)電子簽章系統(tǒng)存在的潛在風(fēng)險。某市政務(wù)部分?jǐn)M開發(fā)一款區(qū)塊鏈電子簽章系統(tǒng),該區(qū)塊鏈電子簽章系統(tǒng)包含為印章使用者、監(jiān)管、平臺運營方的管理功能,場景開放平臺,印章底層引擎,和區(qū)塊鏈基座。場景開放平臺面向各類政務(wù)系統(tǒng)與第三方電子簽名服務(wù)商提供電子簽章相關(guān)的開放能力。場景開放平臺對上提供相關(guān)的基礎(chǔ)能力,對下連接區(qū)塊鏈基座。模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計及系統(tǒng)運維(35分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計結(jié)果、運行代碼、運行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊一提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。任務(wù)1-1:區(qū)塊鏈產(chǎn)品需求分析與方案設(shè)計本任務(wù)需要依據(jù)項目背景完成需求分析與方案設(shè)計,具體要求如下:1.依據(jù)給定區(qū)塊鏈電子印章系統(tǒng)的業(yè)務(wù)架構(gòu)圖,對考題進(jìn)行業(yè)務(wù)分析,盡可能多的去考慮一個業(yè)務(wù)系統(tǒng)所需要的模塊,使用Visio或思維導(dǎo)圖工具展現(xiàn)本系統(tǒng)的基本設(shè)計概念和處理流程,要求分為區(qū)塊鏈電子印章業(yè)務(wù)平臺和支撐平臺兩個部分;2.根據(jù)電子印章系統(tǒng)設(shè)計,在系統(tǒng)中分別包括用戶和簽章管理功能。根據(jù)描述,設(shè)計區(qū)塊鏈電子簽章系統(tǒng)的總體功能概覽圖;3.根據(jù)電子印章系統(tǒng)設(shè)計,請設(shè)計區(qū)塊鏈電子簽章系統(tǒng)通過智能合約確保用戶隱私和數(shù)據(jù)保密的方案;4.根據(jù)電子印章系統(tǒng)設(shè)計,請設(shè)計區(qū)塊鏈電子簽章系統(tǒng)中的身份驗證和授權(quán)管理具體方案。任務(wù)1-2:區(qū)塊鏈系統(tǒng)部署與運維圍繞電子簽章區(qū)塊鏈平臺部署與運維需求,進(jìn)行項目相關(guān)系統(tǒng)、節(jié)點以及管理工具的部署工作。通過通過監(jiān)控工具完成對網(wǎng)絡(luò)、節(jié)點服務(wù)的監(jiān)控。最終利用業(yè)務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點服務(wù)等系統(tǒng)結(jié)構(gòu)維護(hù)。1.登陸Linux服務(wù)器,安裝并部署下圖所示的單機、四機構(gòu)、三群組、八節(jié)點的星形組網(wǎng)拓?fù)鋮^(qū)塊鏈系統(tǒng);2.登陸Linux服務(wù)器,安裝并部署區(qū)塊鏈系統(tǒng)控制臺,檢查部署控制臺是否正常運行;3.登錄Linux服務(wù)器,部署區(qū)塊鏈管理前置平臺;4.登陸Linux服務(wù)器,使用終端生成新的節(jié)點,并且將該節(jié)點加入對應(yīng)群組然后啟動節(jié)點。子任務(wù)1-2-1:登陸Linux服務(wù)器,安裝并部署下圖所示的單機、四機構(gòu)、三群組、八節(jié)點的星形組網(wǎng)拓?fù)鋮^(qū)塊鏈系統(tǒng),具體工作內(nèi)容如下:搭建部署多群組聯(lián)盟鏈并啟動所有節(jié)點;通過命令驗證區(qū)塊鏈節(jié)點進(jìn)程運行狀況;通過命令驗證區(qū)塊鏈連接狀態(tài)和共識狀態(tài)日志輸出。子任務(wù)1-2-2:登陸Linux服務(wù)器,安裝并部署區(qū)塊鏈系統(tǒng)控制臺,檢查部署控制臺是否正常運行,具體工作內(nèi)容如下:解壓控制臺安裝包并拷貝配置文件到當(dāng)前目錄;配置控制臺證書;啟動控制臺;驗證控制臺是否正常運行。子任務(wù)1-2-3:登錄Linux服務(wù)器,部署區(qū)塊鏈管理前置平臺,具體內(nèi)容如下解壓平臺操作對應(yīng)安裝包;配置秘鑰文件并檢查前置平臺啟動情況;查看日志以及查看中間件進(jìn)程;檢查進(jìn)程端口以及訪問服務(wù)。子任務(wù)1-2-4:登陸Linux服務(wù)器,使用終端生成新的節(jié)點,并且將該節(jié)點加入對應(yīng)群組然后啟動節(jié)點,具體內(nèi)容如下:生成新節(jié)點,修改新節(jié)點配置;啟動新節(jié)點,并查看節(jié)點的nodeid;將新節(jié)點作為觀察節(jié)點加入群組1當(dāng)中,并檢查是否加入成功。任務(wù)1-3:區(qū)塊鏈系統(tǒng)測試設(shè)計對區(qū)塊鏈系統(tǒng)的測試流程;結(jié)合實際業(yè)務(wù)需求,調(diào)用部署的智能合約中進(jìn)行系統(tǒng)測試、性能測試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安全漏洞。利用模擬業(yè)務(wù)和測試工具來完成對區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測試。1.基于給定腳本完成區(qū)塊鏈管理平臺部署以及結(jié)果驗證,最后將執(zhí)行結(jié)果截圖保存。實現(xiàn)區(qū)塊鏈管理平臺部署;實現(xiàn)管理平臺啟動情況驗證;驗證身份認(rèn)證進(jìn)程啟動情況驗證和瀏覽器驗證。智能合約安全漏洞測試。有如下智能合約: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;}}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)容并測試其智能合約。

模塊二:智能合約開發(fā)與測試(30分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計結(jié)果、運行代碼、運行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊二提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。任務(wù)2-1:智能合約設(shè)計根據(jù)區(qū)塊鏈電子簽章應(yīng)用需求分析和方案設(shè)計文檔的描述,編寫該區(qū)塊鏈產(chǎn)品的智能合約功能需求文檔,以及設(shè)計該智能合約UML圖,具體要求如下:1.編寫區(qū)塊鏈電子簽章智能合約功能需求文檔根據(jù)區(qū)塊鏈電子簽章產(chǎn)品項目背景和需求分析,編寫該區(qū)塊鏈電子簽章產(chǎn)品的智能合約功能需求文檔。2.完成區(qū)塊鏈電子簽章智能合約的設(shè)計圖設(shè)計區(qū)塊鏈電子簽章智能合約接口,畫出區(qū)塊鏈電子簽章智能合約的角色UML用例圖,以及畫出區(qū)塊鏈電子簽章智能合約關(guān)系的時序圖。任務(wù)2-2:智能合約開發(fā)使用Solidity語言完成智能合約開發(fā)、部署和調(diào)用,要求如下:1.個人簽章信息接口編碼

(1)編寫個人簽章智能合約的實體接口,完成實體通用數(shù)據(jù)的初始化,實現(xiàn)簽章和用戶實體信息上鏈的功能;

structSealInfo{//①姓名//②身份證//③印章數(shù)據(jù)//④創(chuàng)建印章時間戳}(2)編寫簽章信息上鏈的接口,實現(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;}(3)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約判斷多人簽章文件編號是否存在的函數(shù)。//@dev判斷多人簽名文件編號是否存在//@param_code簽章文件編號//@returnbooltrue:存在false:不存在functionisExistMultiCode(string_code)viewinternalreturns(bool){//①遍歷所有多人簽章文件編號并與傳入簽章文件編號參數(shù)進(jìn)行比較//②返回不存在}2.電子印章接口編碼(8分)

(1)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約獲取多人簽章信息函數(shù)(3分)//@dev獲取多人簽章信息//@param_code簽章文件編號//@return(簽章文件摘要、多人簽章發(fā)起人賬戶地址、簽章文件編號、簽章人數(shù)、簽章賬戶地址列表)functiongetMultiSingInfo(string_code)publicviewonlyPromoterOrSingerreturns(string,address,string,uint,address[]memory){//①獲取多人簽章合約對象實例//②返回多人簽章信息}(2)基于給定的智能合約代碼以及注釋,完成ElectronicSeal合約多人簽章函數(shù)(5分)//@dev多人簽章//@param_address簽章人賬戶地址//@param_hash簽章文件摘要//@param_datatime簽章時間戳functiondoMultiSign(address_address,string_hash,string_datetime)publiconlyPromoter{//①判斷傳入的簽章人賬戶地址不能為空//②獲取多人簽章合約對象實例//③獲取當(dāng)前等待簽章賬戶地址//④判斷合約調(diào)用者是否為等待簽章人賬戶地址//⑤進(jìn)行簽章}合約編譯、部署和調(diào)用(1)解決代碼錯誤和警告,正確編譯并部署合約,成功獲取部署的合約地址和abi;

(2)調(diào)用區(qū)塊鏈電子簽章智能合約的接口,完整驗證業(yè)務(wù)流程。任務(wù)2-3:智能合約測試根據(jù)已完成的智能合約,針對開發(fā)功能開展相關(guān)合約測試工作,具體工作內(nèi)容如下:生成測試文件,在Remix中的合約測試目錄tests中生成ElectionSeal_Test.sol的測試文件編譯并部署合約,配置項目的ElectionSeal_Test.sol測試腳本文件。注釋測試文件中自動生成的測試函數(shù)checkSuccess()、checkSuccess2()、checkFailure()、checkSenderAndValue()相關(guān)代碼,運行測試按鈕基于remix的測試項目,將checkSuccess()、checkSuccess2()、checkFailure()、checkSenderAndValue()相關(guān)代碼注釋掉并進(jìn)行相關(guān)測試;實例化在測試文件中定義測試ElectronicSeal合約變量并在beforeAll()函數(shù)中進(jìn)行實例化。創(chuàng)建測試函數(shù)測試印章賬戶數(shù)量基于remix的測試項目,補全位于test文件夾中的ElectionSeal_Test.sol合約測試文件,添加測試用例,補全測試印章賬戶數(shù)量函數(shù)。創(chuàng)建測試函數(shù)測試印章賬戶簽章基于remix的測試項目,補全位于test文件夾中ElectionSeal_Test.sol合約測試文件,添加測試用例,創(chuàng)建測試函數(shù)測試印章賬戶簽章。

模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)(30分)任務(wù)3-1:區(qū)塊鏈電子簽章前端功能開發(fā)1.請基于前端系統(tǒng)的開發(fā)模板,在注冊頁面register.html文件中添加對應(yīng)的代碼邏輯,實現(xiàn)對前端系統(tǒng)的注冊功能,并測試功能完整性,示例頁面如下;題目的具體要求如下:注冊身份證號碼的數(shù)據(jù)實現(xiàn)雙向綁定注冊按鈕的事件綁定將用戶輸入的注冊信息向后端系統(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;"><divclass="form-group"style="width:50%"><!--TODO:請補充注冊按鈕的事件綁定代碼--><buttontype="button"class="btnbtn-successform-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}if(this.user.phone==''){alert("電話號碼不能為空")return}選手填寫部分}}2.請基于前端系統(tǒng)的開發(fā)模板,在登錄頁面login.html文件中添加對應(yīng)的代碼邏輯,實現(xiàn)對前端系統(tǒng)的登錄功能,并測試功能完整性,示例頁面如下:本題目的具體要求如下:登錄按鈕的事件綁定用戶輸入的登錄用戶名和密碼通過雙向綁定存放在user中登錄成功頁面跳轉(zhuǎn)到main.html頁面本地保存登錄狀態(tài)信息(token)login.html代碼片段1:<divclass="modal-footer"style="margin-left:100px;"><divclass="form-group"style="width:75%"><buttontype="button"class="btnbtn-primaryform-control"選手填寫部分>確定</button></div></div>代碼片段2://創(chuàng)建Vue實例newVue({el:'#app',//el用于指定當(dāng)前Vue實例為哪個容器服務(wù),值通常為css選擇器字符串data:{//data中用于存儲數(shù)據(jù),數(shù)據(jù)供el所指定的容器去使用,值我們暫時先寫成一個對象。user:{選手填寫部分},tip:false,msg:""},methods:{submit(){if(this.user.username==''){this.msg="用戶名不能為空"this.tip=truesetTimeout(()=>{this.tip=false},1000)return}if(this.user.password==''){this.msg="密碼不能為空"this.tip=truesetTimeout(()=>{this.tip=false},1000)return}axios.post("http://localhost/user/login",this.user).then(response=>{if(response.data.resultCode==200){this.msg="登錄成功"this.tip=truesetTimeout(()=>{選手填寫部分},1000)選手填寫部分}else{this.msg="登錄失敗"this.tip=truesetTimeout(()=>{this.tip=false},1000)}})},}})3.請基于前端系統(tǒng)的開發(fā)模板,在個人印章頁面myseal.html文件中添加對應(yīng)的頁面代碼邏輯,實現(xiàn)對前端系統(tǒng)的個人印章功能,并測試功能完整性,示例頁面如下:具體要求如下:注銷按鈕的事件綁定注銷時清除本地保存的登錄狀態(tài)信息(token)發(fā)送請求到后端系統(tǒng)攜帶本地保存的登錄狀態(tài)信息(token)接收后端系統(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(){選手填寫部分}},代碼片段3://請求發(fā)前攔截,header中添加tokenerceptors.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ā)模板,請在文件簽章頁面signature.html文件中添加對應(yīng)的頁面代碼邏輯,實現(xiàn)對前端系統(tǒng)的文件簽章業(yè)務(wù)功能,并測試功能完整性,示例頁面如下:具體要求如下:創(chuàng)建canvas畫布實例向后端系統(tǒng)發(fā)送簽章請求url向后端系統(tǒng)獲取個人印章請求url接收后端系統(tǒng)發(fā)送過來的印章圖片信息signature.html代碼片段1:signature(){if(this.status==0){this.msg="請上傳文檔"this.tip=truesetTimeout(()=>{this.tip=false},1000)return}this.status=2varcanvas;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=truesetTimeout(()=>{this.tip=false},1000)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=truesetTimeout(()=>{this.tip=falsewindow.location.href="main.html";},1000)}else{this.msg="簽章文檔上鏈?zhǔn)?this.tip=truesetTimeout(()=>{this.tip=false},1000)}})}代碼片段3:mounted(){//請求發(fā)前攔截,header中添加tokenerceptors.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】請補充向服務(wù)器發(fā)送獲取個人印章請求代碼axios.get("選手填寫部分").then(response=>{if(response.data.resultCode==200){this.seal=選手填寫部分}})}5.請基于前端系統(tǒng)的開發(fā)模板,在文件驗章頁面verity.html文件中添加對應(yīng)的頁面代碼邏輯,實現(xiàn)對前端系統(tǒng)的文件驗章業(yè)務(wù)功能,并測試功能完整性,示例頁面如下:具體要求如下:將驗章結(jié)果數(shù)據(jù)顯示在頁面中向后端系統(tǒng)發(fā)送驗章請求并攜帶驗章文件數(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"><spanaria-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>選手填寫部分</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="btnbtn-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=trueevent.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ā)1.請基于后端系統(tǒng)的開發(fā)模板,在userService.java文件中補充對應(yīng)的代碼邏輯,完成后端代碼邏輯,實現(xiàn)對后端系統(tǒng)的注冊功能,并測試功能完整性,題目具體要求如下:根據(jù)用戶注冊信息中的用戶名和賬戶地址從數(shù)據(jù)庫中查詢賬戶信息是否存在將用戶密碼進(jìn)行md5加密操作將電子印章字節(jié)數(shù)組轉(zhuǎn)為字符串將用戶注冊信息寫入數(shù)據(jù)庫匯總userService.java代碼片段1:publicbooleanregister(RegisterBeanregisterBean){//校驗用戶名或賬戶地址是否重復(fù)QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();queryWrapper.eq("username",registerBean.getUsername()).or().eq("chain_account",registerBean.getChainAccount());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());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ā)模板,補充代碼完成對應(yīng)的后端代碼邏輯,實現(xiàn)后端系統(tǒng)的登錄功能,并測試功能完整性,具體要求如下:登錄成功向前端系統(tǒng)返回登錄狀態(tài)信息(token)添加登錄的用戶名和密碼兩個數(shù)據(jù)庫查詢條件根據(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.currentTimeMillis()));AjaxResult<String>result=newAjaxResult<>(200,"loginok");result.setData(選手填寫部分);returnresult;}else{returnnewAjaxResult<String>(403,"loginfail");}}UserService.java代碼片段1:publicbooleanisLogin(LoginBeanloginBean){QueryWrapper<UserEntity>queryWrapper=newQueryWrapper<>();loginBean.setPassword(SecureUtil.md5(loginBean.getPassword()));//md5加密密碼//TODO:請補充queryWrapper添加用戶名和密碼兩個數(shù)據(jù)庫查詢條件代碼queryWrapper.eq(選手填寫部分).eq(選手填寫部分);//TODO:請補充數(shù)據(jù)庫查詢登錄用戶信息代碼UserEntityuserEntity=選手填寫部分returnuserEntity!=null?true:false;}3.請基于后端系統(tǒng)的開發(fā)模板,補充代碼完成對應(yīng)的后端代碼邏輯,實現(xiàn)對后端系統(tǒng)的賬戶信息查看功能,并測試功能完整性,具體要求如下:從前端系統(tǒng)發(fā)送的請求頭中獲取登錄狀態(tài)信息(token)根據(jù)登錄狀態(tài)信息(token)獲取登錄用戶名根據(jù)用戶名查詢數(shù)據(jù)庫將查詢結(jié)果數(shù)據(jù)封裝到RegisterBean中UserController.java代碼片段1:@ApiOperation(value="用戶信息",notes="獲取用戶詳細(xì)信息")@GetMapping("/user/info")publicAjaxResult<RegisterBean>getUserInfo(HttpServletRequestrequest){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();選手填寫部分returnregisterBean;}4.請基于后端系統(tǒng)的開發(fā)模板,補充代碼完成對應(yīng)的后端代碼邏輯,實現(xiàn)對后端系統(tǒng)的文件簽章功能,并測試功能完整性,具體要求如下:驗證登錄狀態(tài)信息(token)獲取簽章文件的UUID編碼獲取驗章文件摘要(hash)將驗章文件信息寫入智能合約中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;}}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,StringchainAccount){//獲取簽名文檔uuid編碼Stringcode=選手填寫部分SealEntitysealEntity=newSealEntity();BeanUtils.copyProperties(contractBean,sealEntity);String[]str=contractBean.getFilename().split("\\.");sealEntity.setFilename(str[0]);sealEntity.setType(str[1]);sealEntity.setCode(code);//簽章記錄上鏈try{//獲取印章文檔Hash值MessageDigestmessageDigest=選手填寫部分byte[]bytes=messageDigest.digest(contractBean.getImgBase64().getBytes("UTF-8"));Stringhash=Hex.toHexString(bytes);("hash:"+hash);ListfuncParams=newArrayList<>();funcParams.add(chainAccount);funcParams.add(hash);

溫馨提示

  • 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

提交評論