<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 禮物 閱讀(2009) 評論(1)  編輯  收藏 所屬分類: Jsp

    評論

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

    主站蜘蛛池模板: 亚洲毛片免费视频| 成人亚洲综合天堂| 麻豆亚洲AV成人无码久久精品 | 午夜老司机免费视频| 羞羞漫画小舞被黄漫免费| 国产AV无码专区亚洲Av| 国产精品久久久久久久久久免费 | 性盈盈影院免费视频观看在线一区| 免费人成再在线观看网站| 亚洲精品视频在线| 国产成人免费手机在线观看视频| 两个人看的www免费视频| 亚洲a级成人片在线观看| 亚洲色偷偷狠狠综合网| 在线看片韩国免费人成视频| 一日本道a高清免费播放| 亚洲激情视频网站| 久久久久无码专区亚洲av| 色婷婷7777免费视频在线观看| a毛片成人免费全部播放| 亚洲人成网站日本片| 亚洲中文字幕无码日韩| 成人免费视频小说| 免费人成毛片动漫在线播放 | 久久免费看少妇高潮V片特黄| 亚洲日韩国产二区无码| 亚洲成AV人片在线观看无 | 亚洲成aⅴ人片在线观| 老司机亚洲精品影视www| 午夜成人免费视频| 最近免费最新高清中文字幕韩国 | 亚洲免费日韩无码系列| 亚洲色最新高清av网站| 亚洲国产一区在线| 亚洲综合另类小说色区| 日本免费人成黄页网观看视频| 91免费在线播放| 日韩精品无码免费专区午夜| 青青视频免费在线| 亚洲一日韩欧美中文字幕在线| 亚洲色欲www综合网|