電信計費(五)
一.驗證碼匹配圖解分析
分析:
1.瀏覽器通過訪問路徑/toLogin.do訪問伺服器,伺服器用MianServlet轉發給login.jsp處理請求,然後向瀏覽器做出響應返回一個html
2.1瀏覽器對網頁進行載入(文字轉換成物件顯示),瀏覽器向伺服器傳送請求,要求返回路徑相對應的圖片
2.2圖片由靜態變成動態,伺服器用MianServlet中的creatImg()方法去調ImageUtil這個工具類,返回圖片和驗證碼字串
3.處理表單中的請求點選登入後,伺服器通過MianServlet中的login()方法去驗證登入,那麼這裡新增判斷驗證碼判斷的邏輯
第二個請求生成驗證碼給第三個請求使用,需要用session去儲存
二.驗證碼業務實現
1.在MainServlet類中增加createImg()
生成驗證碼圖片的方法,裡面通過ImageUtil工具類去生成圖片陣列,元素1位字串存在session中,元素2點陣圖片使用流傳送到瀏覽器上
// 生成驗證碼
protected void createImg(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// 生成驗證碼及圖片
Object[] objs = ImageUtil.createImage();
// 將驗證碼存入session
HttpSession session = req.getSession();
session.setAttribute("imgcode", objs[0]);
// 將圖片傳送給瀏覽器
res.setContentType("image/png");
// 獲取位元組輸出流,該流由伺服器建立,
// 其目標就是當前訪問的那個瀏覽器.
OutputStream os = res.getOutputStream();
BufferedImage img = (BufferedImage) objs[1];
ImageIO.write(img, "png", os);
os.close();
}
2.在重寫的service方法裡做路徑判斷
else if("/createImg.do".equals(path)) {
createImg(req,res);
}
3.在login.jsp
介面中的要驗證碼圖片進行路徑的替換,並且新增點選事件
<tr>
<td class="login_info">驗證碼:</td>
<td class="width70"><input name="" type="text" class="width70" /></td>
<!-- <td><img src="images/valicode.jpg" alt="驗證碼" title="點選更換" /></td> -->
<td><img src="createImg.do" onclick="this.setAttribute('src','createImg.do?x='+Math.random());" alt="驗證碼" title="點選更換" /></td>
<td><span class="required"></span></td>
</tr>
注:
這裡新增單擊事件去切換驗證碼實質上是隨機動態更改圖片的請求路徑
4.做登入的驗證,驗證這個驗證碼和填寫的是否一致,在login.jsp的驗證碼的邏輯處name="code"
,
<td class="width70"><input name="code" type="text" class="width70" /></td>
5.在MianServlet中的login()方法去驗證登入
String code = req.getParameter("code");
// 檢查驗證碼
HttpSession session = req.getSession();
String imgcode = (String) session.getAttribute("imgcode");
if (code == null || !code.equalsIgnoreCase(imgcode)) {
req.setAttribute("error", "驗證碼錯誤");
req.getRequestDispatcher("WEB-INF/main/login.jsp").forward(req, res);
return;
}
三.登入檢查圖解分析
分析:
1.瀏覽器向伺服器傳送請求,伺服器交給LoginFilter過濾器去處理
2.當登入成功後,把adminCode
存入session中,後面用過濾器判斷登入成功
3.如果過濾器判斷沒有登入過去重定向到登入介面,如果登陸過則可以訪問其他的介面
四.登入檢查業務實現
1.在src/main/java->web下建立LoginFilter檔案,並實現Filter介面
2.在doFilter
方法中從session中獲取賬號,並做判斷
// 從session中獲取賬號
HttpSession session = req.getSession();
Object user = session.getAttribute("adminCode");
// 判斷使用者是否登入
if (user == null) {
// 沒登入,重定向到登入頁
res.sendRedirect(req.getContextPath() + "/toLogin.do");
} else {
// 已登入,請求繼續執行
chain.doFilter(req, res);
}
注:
這裡重定向採用的是絕對路徑,所以用req.getContextPath()
更加靈活
3.在web.xml中配置
<!-- 登入檢查過濾器 -->
<filter>
<filter-name>login</filter-name>
<filter-class>web.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
注:
這裡先全部過濾,然後再在LoginFilter
類中進行篩除
4.把不需要過濾的路徑新增到陣列中,再去獲取當前的路徑,然後遍歷判斷陣列中的路徑是否和當前的路徑相等,如果相等則不需要過濾,後面程式碼不需要執行,程式的請求繼續執行
String[] paths = new String[] { "/toLogin.do", "/login.do", "/createImg.do" };
String current = req.getServletPath();
for (String p : paths) {
if (p.equals(current)) {
chain.doFilter(req, res);
return;
}
}
相關文章
- 電信主推“五圈”轉型3.0天翼開發平臺助力電信新生態
- 來學習!五個免費充電資源
- 走進四川電信 揭秘核心計費系統改造的背後
- rt水電費水電費水電費水電費是的ytrytr
- GlobalData:印度未來五年付費電視增長乏力LDA
- Thinkbox:30%的消費者相信電視廣告值得信賴
- Autolist:消費者不買電動汽車的五大主因
- 五軸電火花穿孔CAM程式設計軟體程式設計
- 中國信通院:2024年春節期間全國行動電話計費時長共計697.5億分鐘
- 工信部:預計2022年電信業務總量同比增長8%
- 奮鬥有迴響!愛可生收到來自工信部電子第五研究所的感謝信
- 線上電商平面設計工具使用教程!免費分享設計模板!
- 超好用的電商設計工具免費分享!教你設計主圖!
- 程式設計師苦應用部署久矣,docker獻計閃電五連鞭程式設計師Docker
- 免費呼叫微信推送介面
- 這五個網站可以讓你免費學習程式設計,快收藏!網站程式設計
- 韓國電信巨頭計劃推出區塊鏈網路區塊鏈
- ITMedia:歐洲付費電視市場預計增長4.6%
- Omdia:2024年量化電信運營商在消費者市場上的商機
- 信也科技:2019中國消費信貸市場研究
- 紙質文件轉換成電子檔用微信這個免費功能只要3秒!
- 電商主圖設計免扣素材免費分享,線上就能設計主圖!
- 電信VoLTE怎麼開通?電信Volte開通方法和注意事項
- TiDB 助力北京電信夯實電信賬務系統的資料底座TiDB
- MFC程式設計(五)C程式程式設計
- shell程式設計五程式設計
- Omdia: 電信運營商整合取得進展,過去五年併購交易超過 500 宗
- 分享五款免費好用的辦公工具
- 三到五年Java程式設計師需要充電的技術清單Java程式設計師
- 四川五金機電商城:五金機電領域的先行者
- 瑞信:國潮走俏消費品行業行業
- 強烈推薦|海量計算機程式設計相關電子書免費下載計算機程式設計
- 電信聯通合併原因分析 聯通和電信合併是真的嗎?
- 微信廣告:微信流量618電商投放指南
- 電信PMO如何確保成功?
- 微信小程式開發常見問題(五)微信小程式
- 亞信安慧AntDB資料庫——助力5G計費核心替換,全面自主可控資料庫
- 程式設計師注意了:這個微信群可以學英語,而且全程免費程式設計師