JavaWeb——驗證碼功能解決表單重複提交問題(使用谷歌驗證碼jar包為例)
驗證碼功能的實現與解決表單重複提交問題
表單重複提交有三種常見的情況:
- 提交完表單,伺服器使用請求轉發來進行頁面跳轉。這個時候,使用者按下功能鍵F5(重新整理頁面),就會重新發起最後一次提交表單的請求。造成表單重複提交問題。解決方法:使用重定向來進行跳轉
- 使用者正常提交伺服器,但是由於網路延遲等原因,遲遲未收到伺服器的響應,這個時候,使用者以為提交失敗,然後多點了幾次提交操作,也會造成表單重複提交。
- 使用者正常提交伺服器。伺服器也沒有延遲,但是提交完成後,使用者回退瀏覽器(遊覽器的返回頁面功能)。重新提交表單,也會造成表單重複提交。
請求重定向解決表單提交問題
因為請求轉發是一次請求,請求重定向是兩次請求,具體見此博文詳解:
https://blog.csdn.net/i_am_handsome_/article/details/109724739
但,請求重定向只能解決上述表單提交問題的第一種情況。
//請求轉發
req.getRequestDispatcher("/pages/client/index.jsp").forward(req, resp);
//請求重定向
resp.sendRedirect(req.getContextPath());
驗證碼解決表單提交問題
驗證碼可以解決上述表單提交問題的後兩種情況。
使用谷歌驗證碼jar包kaptcha.jar實現驗證碼操作步驟:
- 匯入谷歌驗證碼的jar 包
- 在web.xml 中去配置用於生成驗證碼的Servlet 程式
<servlet>
<servlet-name>KaptchaServlet</servlet-name>
<servletclass>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KaptchaServlet</servlet-name>
<url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
- 在表單中使用img 標籤去顯示驗證碼圖片並使用它
<img src=“http://localhost:8080/javaweb/kaptcha.jpg” >
- 獲取Session域中的驗證碼,並刪除Sessjion中的驗證碼(防止下次還是用之前的驗證碼)
- 獲取提交的表單資訊中,驗證碼引數值。
- 比較Session中的驗證碼和表單項中的驗證碼是否相等
//獲取Session中的驗證碼
String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
//刪除Session中的驗證碼
req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
//獲取表單項驗證碼資訊
String code = req.getParameter("code");
//檢查驗證碼是否正確
if (token != null && token.equalsIgnoreCase(code)) {}
點選驗證碼圖片切換驗證碼
如果驗證碼看不清,實現點選驗證碼圖片切換驗證碼的資訊的操作。
//給驗證碼的圖片,繫結單擊事件
$("#code_img").click(function () {
//src屬性表示驗證碼img標籤的圖片路徑,修改後自動跳轉
// new Date();防止快取
this.src = "${basePath}kaptcha.jpg?d=" + new Date();
});
相關文章
- 驗證碼機制之驗證碼重複使用
- JavaScript 表單驗證程式碼例項JavaScript
- pbootcms提交留言、提交自定義表單時取消驗證碼boot
- iview 表單提交資料的時候驗證問題View
- iview表單驗證問題 Select驗證必填失敗,以及表單物件巢狀陣列驗證方法View物件巢狀陣列
- vue+elementUI 複雜表單的驗證、資料提交方案VueUI
- 驗證碼安全問題彙總
- 利用js編寫一個簡單的html表單驗證,驗證通過時提交資料(附原始碼)JSHTML原始碼
- JavaScript 點選回車驗證提交表單JavaScript
- 網站漏洞檢測 身份驗證碼與重要操作驗證碼安全問題網站
- element-ui使用from表單驗證資料問題UI
- 驗證碼原理及驗證
- 驗證碼---js重新整理驗證碼JS
- PHP行為驗證碼PHP
- JQuery表單驗證(包括:使用者名稱,手機號,密碼,確認密碼,驗證碼60s)jQuery密碼
- PHP 表單提交後臺資料驗證 ValidatorPHP
- 網頁上的驗證碼是為了解決什麼問題?說說你瞭解的驗證碼種類有哪些網頁
- JavaScript表單不為空驗證JavaScript
- 【例項】使用GD庫生成圖片驗證碼
- Laravel 表單驗證Laravel
- javascript表單驗證JavaScript
- bootstrap表單驗證boot
- bootstrapValidator 表單驗證boot
- JavaScript 表單驗證JavaScript
- antd 表單驗證
- SpringMVC表單驗證器的使用SpringMVC
- 表單驗證使用擴充套件套件
- JavaScript驗證碼生成和驗證效果JavaScript
- 登入驗證碼生成kaptcha(輸入驗證碼)APT
- 如何解決WEB效能測試中的驗證碼問題Web
- ASP.NET MVC/Core表單提交後臺模型二級屬性驗證問題ASP.NETMVC模型
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊
- 谷歌reCaptcha驗證碼服務再次被攻破谷歌APT
- 直播平臺原始碼,JavaScript表單驗證密碼強度原始碼JavaScript密碼
- oracle 開啟複雜密碼驗證Oracle密碼
- Laravel - 驗證碼Laravel
- Response驗證碼
- PHP驗證碼PHP