<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    jsp驗證碼制作

    ?

      介紹兩個功能強大的開源制作驗證碼組件SimpleCaptcha,JCAPTCHA。

    ?

      一、SimpleCaptcha搜狐郵箱注冊時就使用了該組件,主頁:
    ??http://simplecaptcha.sourceforge.net/index.html

    ?

    example


    ?1.配置
    ??將下載的jar文件放置工程的lib目錄下,打開工程的web.xml文件加上相應的配置
    ?<servlet>
    ??<servlet-name>Captcha</servlet-name>
    ??<servlet-class>nl.captcha.servlet.CaptchaServlet</servlet-class>
    ??<!--邊框顯示參數-->
    ??<init-param>
    ???<param-name>cap.border</param-name>
    ???<param-value>yes</param-value>
    ??</init-param>

    ??<!-- 設置圖片邊框色 -->
    ??<init-param>
    ???<param-name>cap.border.c</param-name>
    ???<param-value>green</param-value>
    ??</init-param>

    ??<!-- 邊框粗細-->
    ??<init-param>
    ???<param-name>cap.border.th</param-name>
    ???<param-value>1</param-value>
    ??</init-param>

    ??<!-- the image producer. Currently only one-->
    ??<init-param>
    ???<param-name>cap.cap.producer</param-name>
    ???<param-value>
    ????nl.captcha.obscurity.imp.DefaultCaptchaIml
    ???</param-value>
    ??</init-param>

    ??<!-- 設置驗證碼的內容 -->
    ??<init-param>
    ???<param-name>cap.text.producer</param-name>
    ???<!--<param-value>Default</param-value>-->
    ???<!-- 此處是我自定義的一個顯示中文的類 -->
    ???<param-value>org.ChineseTextProducer</param-value>
    ??</init-param>

    ??<!-- 此處可不定義,可在自定義類中定義所有的要顯示的內容 -->
    ??<init-param>
    ???<param-name>cap.char.arr</param-name>
    ???<param-value>
    ????2,3,4,6,7,8,9,a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,x,y,z
    ???</param-value>
    ??</init-param>

    ??<!-- 設置圖片顯示內容長度 -->
    ??<init-param>
    ???<param-name>cap.char.arr.l</param-name>
    ???<param-value>4</param-value>
    ??</init-param>

    ??<init-param>
    ???<param-name>cap.font.arr</param-name>
    ???<!-- 如果使用中文時設置成中文的字體 -->
    ???<param-value>
    ????Arial,Helvetica,Courier,TimesRoman,宋體,黑體
    ???</param-value>
    ??</init-param>

    ??<!-- 設置字體大小 -->
    ??<init-param>
    ???<param-name>cap.font.size</param-name>
    ???<param-value>30</param-value>
    ??</init-param>

    ??<!-- 設置圖片字體色 -->
    ??<init-param>
    ???<param-name>cap.font.color</param-name>
    ???<param-value>white</param-value>
    ??</init-param>
    ??
    ??<!-- 扭曲; 曲解; 變形 begin -->
    ??<!-- 圖片效果1
    ??<init-param>
    ???<param-name>cap.obscurificator</param-name>
    ???以下任選一
    ???<param-value>nl.captcha.obscurity.imp.ShadowGimpyImp</param-value>
    ???<param-value>nl.captcha.obscurity.imp.WaterRiple</param-value>
    ???<param-value>nl.captcha.sandbox.TestGimpyImp</param-value>
    ??</init-param>
    ??-->
    ??<init-param>
    ???<param-name>cap.obscurificator</param-name>
    ???<param-value>org.FishEyeGimpyImp</param-value>
    ??</init-param>

    ??<init-param>
    ???<param-name>cap.border</param-name>
    ???<param-value>no</param-value>
    ??</init-param>

    ??<init-param>
    ???<param-name>cap.char.arr.l</param-name>
    ???<param-value>6</param-value>
    ??</init-param>

    ??<init-param>
    ???<param-name>cap.background.c.to</param-name>
    ???<param-value>white</param-value>
    ??</init-param>
    ??
    ??<init-param>
    ???<param-name>cap.background.c.from</param-name>
    ???<param-value>white</param-value>
    ??</init-param>
    ??<!--扭曲; 曲解; 變形 end 不想要這種效果可注釋以上代碼-->


    ??<init-param>
    ???<param-name>cap.distortionImp</param-name>
    ???<param-value />
    ??</init-param>

    ??<init-param>
    ???<param-name>cap.backgroundImp</param-name>
    ???<param-value />
    ??</init-param>

    ??<!-- 此處色為漸變的色 -->
    ??<init-param>
    ???<param-name>cap.background.c.to</param-name>
    ???<param-value>black</param-value>
    ??</init-param>

    ??<!-- 圖片左邊色 -->
    ??<init-param>
    ???<param-name>cap.background.c.from</param-name>
    ???<param-value>black</param-value>
    ??</init-param>

    ??<!--干擾線實現類-->
    ??<init-param>
    ???<param-name>cap.noiseImp</param-name>
    ???<param-value>nl.captcha.obscurity.imp.DefaultNoiseImp</param-value>
    ??</init-param>

    ??<!-- 干擾線色
    ??<init-param>
    ???<param-name>cap.noise.c</param-name>
    ???<param-value>255,245,219</param-value>
    ??</init-param>
    ?? -->
    ?</servlet>
    ?<servlet-mapping>
    ??<servlet-name>Captcha</servlet-name>
    ??<url-pattern>/Captcha.jpg</url-pattern>
    ?</servlet-mapping>
    ??以上配置可根據喜好設置。

    ?

    ?2、調用顯示

    ?在要顯示驗證碼的頁面中加入<img src="Captcha.jpg">即可顯示生成的驗證碼

    ?

    ?3、后臺驗證
    ?驗證非常簡單,通過session.getAttribute(nl.captcha.servlet.Constants.SIMPLE_CAPCHA_SESSION_KEY);即可得到組件生成
    的驗證碼,然后與前臺傳遞的用戶填寫的內容比較即可。
    ?
    ?注:如果要自定義驗證碼的內容可以繼承DefaultTextCreator類,覆寫getText()方法即可,方法返回的是一個字符串。

    ?

      二、JCAPTCHA,該組件功能非常強大,可以生成word、圖片、聲音等驗證碼。主頁:
    ?http://forge.octo.com/jcaptcha/confluence/display/general/Home
    ?http://jcaptcha.sourceforge.net/

    ?

    example
    ?更多實例可以查看:http://forge.octo.com/jcaptcha/confluence/display/general/Samples+tests


    ?1、配置
    ?下載JCAPTCHA后將jcaptcha.jar和commons-collections-2.1以上.jar(單獨下載,地址:http://commons.apache.org/collections/)放置工程lib目錄下。

    ?

    ?2、Implement a CaptchaService

    ?import com.octo.captcha.service.image.ImageCaptchaService;
    ?import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;

    ?public class CaptchaServiceSingleton {

    ???? private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService();

    ???? public static ImageCaptchaService getInstance(){
    ??????? ?return instance;
    ??? ?  }
    ?}

    ?

    ?3、編寫一個產生驗證碼的servlet
    ?
    ?public class ImageCaptchaServlet extends HttpServlet {
    ?
    ?protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
    ???????throws ServletException, IOException {

    ??????? byte[] captchaChallengeAsJpeg = null;
    ?????
    ??????? ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
    ??????? try {
    ????? ??String captchaId = httpServletRequest.getSession().getId();
    ???????
    ??????? ?BufferedImage challenge =
    ??????????????????? CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
    ??????????????????????????? httpServletRequest.getLocale());
    ??????????? 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();

    ??????? 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();
    ??? }
    }


    ?4、將servlet添加到web.xml文件中
    ?<servlet>
    ???????? <servlet-name>jcaptcha</servlet-name>
    ??????? ?<servlet-class>ImageCaptchaServlet</servlet-class>
    ???????? <load-on-startup>0</load-on-startup>
    ??????? </servlet>

    ?<servlet-mapping>
    ??????? ?<servlet-name>jcaptcha</servlet-name>
    ???????? <url-pattern>/jcaptcha</url-pattern>
    ?</servlet-mapping>

    ?

    ?5、在頁面中顯示
    ?<img src="jcaptcha">
    ?<input type='text' name='captcha_code' value=''>

    ?

    ?6、后臺驗證
    ?Boolean isResponseCorrect =Boolean.FALSE;
    ??????? String captchaId = httpServletRequest.getSession().getId();
    ??????? String response = httpServletRequest.getParameter("captcha_code");
    ??????? try {
    ??????????????? isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,response);
    ??????? } catch (CaptchaServiceException e) {
    ??//TODO
    ??????? }
    ?最簡單的開發過程結束,試運行一下效果!
    ?
    ?注:要實現自己的驗證引擎可以繼承ListImageCaptchaEngine實現抽象方法buildInitialFactories()。

    posted on 2009-07-29 10:37 禮物 閱讀(2010) 評論(1)  編輯  收藏 所屬分類: Jsp

    評論

    # re: 利用開源組件制作驗證碼 Captcha 2013-08-29 12:09 ssss
    ggg  回復  更多評論
      

    主站蜘蛛池模板: 热99RE久久精品这里都是精品免费| 亚洲欧洲日韩极速播放| 亚洲精品无码mⅴ在线观看| 一个人免费观看www视频| 四虎影视精品永久免费网站| 亚洲精品无码久久| 中文字幕亚洲专区| 三级毛片在线免费观看| 久久亚洲AV永久无码精品| 老汉精品免费AV在线播放| 久久久无码精品亚洲日韩按摩| 免费国产黄网站在线观看可以下载| 亚洲色www永久网站| 18禁免费无码无遮挡不卡网站| 亚洲三级视频在线| 日韩一区二区免费视频| 美女被吸屁股免费网站| MM131亚洲国产美女久久| 免费无码黄网站在线看| 亚洲精品9999久久久久无码 | 亚洲av无码无在线观看红杏| 中文字幕免费视频精品一| 亚洲AV色吊丝无码| 国产亚洲人成网站观看| 啦啦啦完整版免费视频在线观看| 亚洲欧洲日韩国产| 国产精品自在自线免费观看| 国产精品福利在线观看免费不卡| 久久青草亚洲AV无码麻豆| 四虎永久免费地址在线网站| 亚洲免费网站在线观看| 色偷偷噜噜噜亚洲男人| 久久亚洲AV永久无码精品| 最近的中文字幕大全免费版| 黄色一级视频免费| 亚洲午夜无码久久| 亚洲日韩乱码中文无码蜜桃臀| 亚洲精品自产拍在线观看| 亚洲日韩涩涩成人午夜私人影院| 免费观看理论片毛片| 成人免费乱码大片A毛片|