版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)2B網(wǎng)絡(luò)投票系統(tǒng)的實(shí)現(xiàn)與安全性分析一、實(shí)驗(yàn)?zāi)康?.學(xué)會(huì)配置JSP運(yùn)行環(huán)境,初步熟悉WEB應(yīng)用程序的開(kāi)發(fā)過(guò)程。2.通過(guò)對(duì)一個(gè)投票系統(tǒng)的安全性分析,理解系統(tǒng)的設(shè)計(jì)者、審核者和相關(guān)管理機(jī)構(gòu)的責(zé)任。二、實(shí)驗(yàn)準(zhǔn)備1.網(wǎng)絡(luò)通信中最常見(jiàn)的模式是B/S模式,即用戶(hù)使用瀏覽器向某個(gè)服務(wù)器發(fā)出請(qǐng)求,服務(wù)器進(jìn)行必要的處理后,將有關(guān)信息發(fā)給用戶(hù)瀏覽器。在B/S模式下,服務(wù)器上必須有所謂的WEB應(yīng)用程序。常用的WEB應(yīng)用程序技術(shù)有JSP和ASP。JSP程序(頁(yè)面)需要一個(gè)JSP引擎來(lái)運(yùn)行,這個(gè)引擎就是JSP的WEB服務(wù)器Tomcat。2.在設(shè)計(jì)WEB應(yīng)用時(shí),服務(wù)器在很多情況下需要將用戶(hù)提供的數(shù)據(jù)保存在在服務(wù)器端,本實(shí)驗(yàn)需要首先在一臺(tái)機(jī)器上同時(shí)安裝Tomcat服務(wù)器和Mysql數(shù)據(jù)庫(kù)服務(wù)器,本實(shí)驗(yàn)的架構(gòu)如圖2-2所示:圖2-2本實(shí)驗(yàn)的Web架構(gòu)3.對(duì)于網(wǎng)絡(luò)投票系統(tǒng)而言,其安全性相當(dāng)重要,請(qǐng)讀者參考教材相關(guān)內(nèi)容,分析并給出網(wǎng)絡(luò)投票系統(tǒng)的安全性要求,并分析相關(guān)實(shí)現(xiàn)辦法。三、實(shí)驗(yàn)內(nèi)容1.在Win10操作系統(tǒng)下下安裝配置JSP運(yùn)行環(huán)境(1)安裝JDK1.8,設(shè)置環(huán)境變量。(2)檢驗(yàn)安裝配置是否正確。(3)安裝與啟動(dòng)Tomcat。(4)測(cè)試:在瀏覽器中輸入地址:http://localhost:8080,測(cè)試服務(wù)器是否成功啟動(dòng)。2、連接mysql數(shù)據(jù)庫(kù)利用mysql-connector-java-5.1.14-bin.jar驅(qū)動(dòng)包連接數(shù)據(jù)庫(kù)。3.調(diào)試、運(yùn)行和分析一個(gè)投票系統(tǒng)。首先需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)vote_db,將該數(shù)據(jù)庫(kù)設(shè)置為一個(gè)數(shù)據(jù)源。該庫(kù)有兩張表candidate和user,其中candidate表有id,person和acount三個(gè)字段,用來(lái)存放候選人的id,名稱(chēng)和得票數(shù);user表有id,username,idcard,password和state,用來(lái)存放投票者的id,用戶(hù)名,身份證,密碼和狀態(tài)。本投票系統(tǒng)由index.jsp和stat.jsp兩個(gè)頁(yè)面組成,index.jsp按照user表中的候選人生成一個(gè)投票表單,用戶(hù)使用該表單投票,stat.jsp是投票完成系統(tǒng)頁(yè)面。index.jsp//投票頁(yè)面<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><!DOCTYPEhtml><htmllang="zh-cn"><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><metaname="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><!--SEO優(yōu)化--><metaname="keywords"content="投票"><metaname="author"content="teamchen"><title>TeamChen投票案例</title><!--導(dǎo)入Bootstrap相關(guān)包--><linkrel="stylesheet"href="css/bootstrap.min.css"></head><body> <divclass="container-fluid"> <divclass="jumbotron"> <h1>歡迎參與投票</h1> <br/> <p>組長(zhǎng):陳璐140104300205</p> <p>組員:王春曉140104300123</p> <c:choose> <c:whentest="${user.username==null}"> <p> <aclass="btnbtn-primarybtn-lg"data-toggle="modal" data-target="#loginOrRegister">請(qǐng)驗(yàn)證您的身份信息</a> <pclass="bg-danger">${unLogin}</p> <pclass="bg-danger">${warning}</p> </p> </c:when> <c:whentest="${user.username!=null}"> <p> <aclass="btnbtn-primarybtn-lg"href="logout">您好!${user.username}。安全退出</a> </p> </c:when> </c:choose> </div> <formid="doVote"action="doVote"method="post"> <tableclass="tabletable-hover"> <trclass="active"> <pclass="lead">您最喜歡的課程?</p> </tr> <c:forEachitems="${canList}"var="candidate"> <tr> <td><labelid="chk_candidate"class="checkbox"><inputtype="radio" name="cid"id="candidate_id"value="${candidate.id}"> ${candidate.person} </label></td> </tr> </c:forEach> </table> <buttontype=submitclass="btnbtn-primary">提交</button> </form> </div> <!--Modal--> <divclass="modalfade"id="loginOrRegister"tabindex="-1" role="dialog"aria-labelledby="myModalLabel"> <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">請(qǐng)驗(yàn)證您的身份信息</h4> </div> <divclass="modal-body"> <divclass="tab-content"id="userInfoTabContent"> <divclass="tab-panefadeinactive"id="register"> <formaction="register"method="post"> <divclass="form-group"> <labelfor="exampleInputEmail1">姓名</label><inputtype="text" class="form-control"name="username"placeholder="姓名"> </div> <divclass="form-group"> <labelfor="exampleInputPassword1">身份證號(hào)碼</label><input type="password"class="form-control"name="idcard" placeholder="身份證號(hào)碼"> </div> <divclass="form-group"> <labelfor="exampleInputPassword1">密碼</label><input type="password"class="form-control"name="password" placeholder="密碼"> </div> <buttontype="submit"class="btnbtn-primary">確定</button> </form> </div> </div> </div> <divclass="modal-footer"> <buttontype="button"class="btnbtn-default"data-dismiss="modal">取消</button> </div> </div> </div> </div> <scriptsrc="js/jquery-1.11.1.min.js"></script> <scriptsrc="js/bootstrap.min.js"></script> <script> <%--functionisLoginAndSubmit(){ varusername="<%=session.getAttribute("user.username")%>"; varfmdovote=document.getElementById('doVote'); alert(fmdovote); //username默認(rèn)為Null if(username==null){ alert("確定?"); }else{ alert("請(qǐng)先登錄!"); fmdovote.onsubmit=function(){ returnfalse; }; } };--%> $("#doVote").submit(function(){ alert("確定提交嗎?") }); </script></body></html>stat.jsp//投票成功頁(yè)面<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><%@tagliburi="/jsp/jstl/core"prefix="c"%><!DOCTYPEhtml><htmllang="zh-cn"><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><metaname="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><!--SEO優(yōu)化--><metaname="keywords"content="投票"><metaname="author"content="teamchen"><title>TeamChen投票案例</title><!--導(dǎo)入Bootstrap相關(guān)包--><linkrel="stylesheet"href="css/bootstrap.min.css"></head><body> <divclass="container"> 提交成功 </div> <scriptsrc="js/jquery-1.11.1.min.js"></script> <scriptsrc="js/bootstrap.min.js"></script></body></html>edu.bzsecure.pojo/Candidate.java//實(shí)體類(lèi)packageedu.bzsecure.pojo;publicclassCandidate{privateIntegerid;privateStringperson;privateIntegeracount;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetPerson(){returnperson;}publicvoidsetPerson(Stringperson){this.person=person==null?null:person.trim();}publicIntegergetAcount(){returnacount;}publicvoidsetAcount(Integeracount){this.acount=acount;}}edu.bzsecure.pojo/User.java//實(shí)體類(lèi)packageedu.bzsecure.pojo;publicclassUser{privateIntegerid;privateStringusername;privateStringidcard;privateStringpassword;privateIntegerstate;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username==null?null:username.trim();}publicStringgetIdcard(){returnidcard;}publicvoidsetIdcard(Stringidcard){this.idcard=idcard==null?null:idcard.trim();}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password==null?null:password.trim();}publicIntegergetState(){returnstate;}publicvoidsetState(Integerstate){this.state=state;}}edu.bzsecure.mapper/CandidateMapper.java//映射類(lèi)packageedu.bzsecure.mapper;importjava.util.List;importedu.bzsecure.pojo.Candidate;publicinterfaceCandidateMapper{ //投票 voidupdateAcountById(Integercid);}edu.bzsecure.mapper/UserMapper.java//映射類(lèi)packageedu.bzsecure.mapper;importedu.bzsecure.pojo.User;publicinterfaceUserMapper{intdeleteByPrimaryKey(Integerid);intinsert(Userrecord);intinsertSelective(Userrecord);}edu.bzsecure.controller/UserController.javapackageedu.bzsecure.controller;importjavax.servlet.http.HttpSession;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importedu.bzsecure.pojo.User;importedu.bzsecure.service.UserService;@ControllerpublicclassUserController{ @Autowired privateUserServiceuserService; @RequestMapping("/register") publicStringregister(HttpSessionsession, @RequestParam("username")Stringusername, @RequestParam("idcard")Stringidcard, @RequestParam("password")Stringpassword){ Useruser=newUser(); user.setUsername(username); user.setIdcard(idcard); user.setPassword(password); user.setState(1); userService.insertUser(user); session.setAttribute("user",user); return"redirect:/"; } @RequestMapping("/logout") publicStringregister(HttpSessionsession){ session.invalidate(); return"redirect:/"; } }edu.bzsecure.controller/PageController.javapackageedu.bzsecure.controller;importjava.util.ArrayList;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.RequestMapping;importedu.bzsecure.pojo.Candidate;importedu.bzsecure.service.CandidateService;@ControllerpublicclassPageController{ @Autowired privateCandidateServicecandidateService; @RequestMapping("/") publicStringgetIndex(Modelmodel){ List<Candidate>canList=newArrayList<>(); canList=candidateService.findAllCandidate(); model.addAttribute("canList",canList); return"index"; } }edu.bzsecure.controller/UserController.javapackageedu.bzsecure.controller;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSession;importorg.apache.solr.client.solrj.response.FacetField.Count;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importcom.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleIfStatement.Else;importedu.bzsecure.pojo.User;importedu.bzsecure.service.DoVoteService;@ControllerpublicclassVoteController{ privateintCOUNT=1; @Autowired privateDoVoteServicedoVoteService; @RequestMapping("/doVote") publicStringdoVote(@RequestParam("cid")Stringcid,HttpServletRequestreq){ HttpSessionsession=req.getSession(); Useruser=(User)session.getAttribute("user"); if(user!=null&&COUNT==1){ doVoteService.updateAcountById(Integer.parseInt(cid)); COUNT=0; session.setAttribute("warning","您已經(jīng)投過(guò)票了!"); return"stat"; }elseif(COUNT==0){ session.setAttribute("warning","您已經(jīng)投過(guò)票了!"); return"redirect:/"; }else{ session.setAttribute("unLogin","←請(qǐng)先進(jìn)行登錄,再投票!"); return"redirect:/"; } } }edu.bzsecure.service.impl/CandidateService.javapackageedu.bzsecure.service.impl;importjava.util.ArrayList;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importedu.bzsecure.mapper.CandidateMapper;importedu.bzsecure.pojo.Candidate;importedu.bzsecure.service.CandidateService;@Service("c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024政工程合同協(xié)議書(shū):新能源項(xiàng)目合作協(xié)議3篇
- 2024建筑水電安裝系統(tǒng)檢測(cè)與維護(hù)合同
- 2024消防工程維保與消防系統(tǒng)智能化改造服務(wù)協(xié)議3篇
- 專(zhuān)業(yè)消防站施工建設(shè)協(xié)議樣本版A版
- 2024版專(zhuān)業(yè)土方外運(yùn)工程承包合同范本版B版
- 2024氣象站氣象儀器設(shè)備采購(gòu)與維護(hù)服務(wù)協(xié)議3篇
- 2024靈活就業(yè)人員的勞動(dòng)合同
- 專(zhuān)業(yè)液體化工品運(yùn)輸協(xié)議2024定制版版B版
- 個(gè)人房產(chǎn)轉(zhuǎn)讓協(xié)議范本2024版版B版
- 企業(yè)員工培訓(xùn)之喚醒正能量培訓(xùn)
- 2024年天津市中考?xì)v史試卷真題(含答案逐題解析)
- DL∕T 681.1-2019 燃煤電廠磨煤機(jī)耐磨件技術(shù)條件 第1部分:球磨機(jī)磨球和襯板(代替DLT 681-2012)
- AQ/T 1121-2023 煤礦安全現(xiàn)狀評(píng)價(jià)實(shí)施細(xì)則(正式版)
- 四川省成都市青白江區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末數(shù)學(xué)試題(含答案詳解)
- 骨科中醫(yī)護(hù)理方案培訓(xùn)計(jì)劃(2篇)
- 2024年美國(guó)X射線(xiàn)熒光光譜儀(XRF)市場(chǎng)現(xiàn)狀及上下游分析報(bào)告
- Other-the-other-others-another等習(xí)題辨析(附答案+解析)
- DZ∕T 0289-2015 區(qū)域生態(tài)地球化學(xué)評(píng)價(jià)規(guī)范(正式版)
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 食品機(jī)械與設(shè)備智慧樹(shù)知到期末考試答案章節(jié)答案2024年西北農(nóng)林科技大學(xué)
- DB32T 4400-2022《飲用水次氯酸鈉消毒技術(shù)規(guī)程》
評(píng)論
0/150
提交評(píng)論