使用jcaptcha外掛生成驗證碼
2.建立一個CaptchaServiceSingleton類用來獲取jcaptcha自己實現的預設驗證碼生成器物件DefaultManageableImageCaptchaService(使用單例模式)。
package com.xhc.jcaptcha; import com.octo.captcha.service.image.DefaultManageableImageCaptchaService; import com.octo.captcha.service.image.ImageCaptchaService; public class CaptchaServiceSingleton { private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(); public static ImageCaptchaService getInstance(){ return instance; } }
3.建立處理驗證碼生成的servlet
package com.xhc.jcaptcha; import java.awt.image.BufferedImage; import java.awt.image.Raster; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.octo.captcha.service.CaptchaServiceException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class ImageCaptchaServlet extends HttpServlet { public void destroy() { super.destroy(); } public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { byte[] captchaChallengeAsJpeg = null; // the output stream to render the captcha image as jpeg into ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { // get the session id that will identify the generated captcha. //the same id must be used to validate the response, the session id is a good candidate! String captchaId = httpServletRequest.getSession().getId(); // call the ImageCaptchaService getChallenge method BufferedImage challenge = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB); challenge=CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId, httpServletRequest.getLocale()); // a jpeg encoder JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream); jpegEncoder.encode(challenge); } catch (IllegalArgumentException e) { httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); return; } catch (CaptchaServiceException e) { httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); // flush it in the response httpServletResponse.setHeader("Cache-Control", "no-store"); httpServletResponse.setHeader("Pragma", "no-cache"); httpServletResponse.setDateHeader("Expires", 0); httpServletResponse.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } public void init(ServletConfig servletConfig) throws ServletException { super.init(servletConfig); } }
若匯入這兩個類時報錯import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;原因:Eclipse預設把這些受訪問限制的API設成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings裡面的Deprecated and restricted API中的Forbidden references(access rules)選為Warning就可以編譯通過。4.建立用來做驗證的servlet
package com.xhc.jcaptcha; import java.io.IOException; import java.io.PrintWriter; import java.net.HttpRetryException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.octo.captcha.service.CaptchaServiceException; public class ValidationServlet extends HttpServlet { public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { Boolean isResponseCorrect =Boolean.FALSE; //remenber that we need an id to validate! String captchaId = httpServletRequest.getSession().getId(); //retrieve the response String response = httpServletRequest.getParameter("j_captcha_response"); // Call the Service method httpServletResponse.setContentType("text/html;charset=utf-8"); PrintWriter wt=httpServletResponse.getWriter(); try { isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId, response); if(isResponseCorrect){ wt.write("<a>驗證碼輸入成功</a>"); }else{ wt.write("<a>驗證碼輸入失敗</a>"); } } catch (CaptchaServiceException e) { //should not happen, may be thrown if the id is not valid } } public void init() throws ServletException { } }
5.配置web.xml
<servlet>
<servlet-name>ImageCaptchaServlet</servlet-name>
<servlet-class>com.xhc.jcaptcha.ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>ValidationServlet</servlet-name>
<servlet-class>com.xhc.jcaptcha.ValidationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageCaptchaServlet</servlet-name>
<url-pattern>/servlet/ImageCaptchaServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ValidationServlet</servlet-name>
<url-pattern>/servlet/ValidationServlet</url-pattern>
</servlet-mapping>
6.jsp頁面
<body>
<form action="servlet/ValidationServlet" method="GET">
<input type="text" name="j_captcha_response">
<img src="servlet/ImageCaptchaServlet" height="50" width="100">
<input type="submit" value="提交" />
</form>
</body>
相關推薦
使用jcaptcha外掛生成驗證碼
2.建立一個CaptchaServiceSingleton類用來獲取jcaptcha自己實現的預設驗證碼生成器物件DefaultManageableImageCaptchaService(使用單例模式)。package com.xhc.jcaptcha; import c
無外掛及工具純java生成驗證碼
1:html頁面 <body> <image id="code" src="DemoServlet"></image> <input type="button" value="看不清,換一張" id="btn" onclick="c
使用JCaptcha生成驗證碼
使用JCaptcha工具包生成驗證碼 引入Lib包 (包括一些依賴包commons-collections等) 從Servlet看起 <!-- 驗證碼Servlet --> <servlet> <servlet-name>jca
使用php如何生成驗證碼
輸出 fontsize lora 支付 () 頭文件 出圖 and utf 項目中經常會遇到一些登陸驗證,支付驗證等等一系列安全驗證的策略。實現方法多種多樣,下面就來講解下如何用php生成簡單的文字+數字組合的驗證碼: 所用語言php,gd庫 原理解釋: a>實質上
java生成驗證碼圖片
val ttr attribute cep 隨機字符串 sta random pragma rac public class AuthImg extends HttpServlet { /** * */ privat
php生成驗證碼 參考PHP手冊
ffffff -type apach ob_clean library bom頭 ear png 手冊 視圖層 復制粘貼就可以 phpStudy2013 GD支持未開啟 解決方法 phpStudyAdmin控制臺 - 配置文件 - php.ini 查找“extension=
C#生成驗證碼之四位隨機數
返回 args nbsp ica ebo inpu cti spa ini 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using Sys
詳解圖形圖像技術如何生成驗證碼?
mage 隨機數 har 地址 idt session floor oct type 先說一下思路: (1)先做出基本樣式 (2)用圖像處理技術生成驗證碼,並存session (3)註意img的路徑,後面要跟一個隨機數,便於每次刷新時,傳的地址都是不一樣的 (4)用for
Python學習心得(五) random生成驗證碼、MD5加密、pickle與json的序列化和反序列化
用法 div com ict file imp randint csdn == # -*- coding:utf-8 -*- import random as rd #驗證碼 import hashlib as hsl #MD5加密 import pickle,json
laravel5.4生成驗證碼
validate jpeg mage 命令 不顯示 ace request 技術 執行c 總結:本篇博客介紹使用gregwar/captcha實現驗證碼的具體操作步驟,以及可能遇到的問題和解決辦法。 操作步驟: 1, 在laravel5.4項目根目錄下找到 composer
隨機生成驗證碼及python中的事務
join != rst row pda cep 操作 status 隨機 1.隨機生成驗證碼 # import random # print(random.random()) #0-1的小數 # print(random.randint(1,3))
【5】GDI+ 生成驗證碼
splay 小應用 eric gen 前景 num 微軟 param graphic 這裏我們做一個小應用,就是繪制一個如下圖所示的驗證碼圖片。並且點擊驗證碼的時候會自動切換。 實現思路如下: 通過Random生成隨機數或字符及驗證碼 通過驗證碼內容長度生成指定大小的圖
三條代碼 搞定 python 生成驗證碼
python 驗證碼C:\Users\DELL>pythonPython 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright",
Python 生成驗證碼
blog col log num style class pytho int spa temp2 = "" for i in range(6): num = random.randrange(0,6) if num == 1 or num == 3
python快速生成驗證碼(密碼)
python隨機生成驗證碼密碼描述:一個簡單的練習生成驗證碼或密碼的小腳本程序,驗證碼廣泛用於web的隨機驗證模塊,也可以通過稍稍改造,達到隨機生成密碼的效果.來看看代碼吧:代碼:def GetCode(num): code = ‘‘ for i in range(num):
java Zing生成驗證碼
內嵌 hash exc 圖片 || final print pat fin package yanzm;import java.awt.image.BufferedImage; import java.io.File; import java.io.IOExce
前端生成驗證碼圖片utils
sta substr setfont som 生成 col height log etc <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%
random 模塊,隨機生成驗證碼
spa print for HR rand 利用 col random range 隨機生成驗證碼: 此功能利用了chr 和random功能 1 res =‘‘ 2 for i in range(6): 3 num = str(random.randint(0,9
隨機生成驗證碼
else span 生成 check spa ret 驗證 dom code 1 def check_code(): #隨機生成驗證碼 2 import random 3 checkcode = ‘‘ 4 for i in range(4
7月2日 Django 生成驗證碼、
orm with tex quest 大小 obj randint http 得到 html頁面裏 {# 驗證碼 #} <div class="form-group " id="v-code-wrapper"> <label