關於java驗證碼

來源:互聯網
上載者:User

驗證碼應用的地方很多,多處用於防止使用者惡意不間斷錄入。

下面就介紹一種java驗證碼的方式:拿登入功能來舉例(例子中使用了struts2+spring2.6.5)

首先login.jsp寫一個IMG標籤和JS方法。

<img id="captchaImage" src="<%=request.getContextPath()%>/login/createJcaptcha.action"  width="100" height="30" align="top" onclick="onImageClick(this);"> 

function onImageClick(o){      document.getElementById('captchaImage').src ='<%=request.getContextPath()%>/login/createJcaptcha.action?captchaId=' + Math.random();  }

 

spring設定檔:

<bean id="captchaEngine"class="com.octo.captcha.engine.image.gimpy.SimpleListImageCaptchaEngine" /><bean id="captchaService"class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService"><property name="captchaEngine" ref="gmailEngine" /><property name="minGuarantedStorageDelayInSeconds" value="600" /></bean>

需要jar包:jcaptcha-2.0-alpha-1-SNAPSHOT.jar

後台Action代碼:

private ImageCaptchaService captchaService;(已被注入)

建立驗證碼

public void createJcaptcha() throws IOException {         
        byte[] captchaChallengeAsJpeg = null;        ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();        String captchaId = request.getParameter("captchaId");        if (logger.isDebugEnabled()) {            logger.debug("captchaIdParameter: " + captchaId);        }        captchaId = request.getSession().getId();        BufferedImage challenge = getCaptchaService().getImageChallengeForID(captchaId, request.getLocale());        JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);        jpegEncoder.encode(challenge);        captchaChallengeAsJpeg = jpegOutputStream.toByteArray();        response.setHeader("Cache-Control", "no-store");        response.setHeader("Pragma", "no-cache");        response.setDateHeader("Expires", 0);        response.setContentType("image/jpeg");        OutputStream os = response.getOutputStream();        try {            os.write(captchaChallengeAsJpeg);            os.flush();        } finally {            os.close();        }    }

 

 

提交時校正驗證碼:

public boolean checkJcaptcha() {
        boolean flag = false;        String checkcode = checkCode.trim(); // 提取驗證碼         String id = request.getSession().getId();        if (StringUtils.isNotBlank(checkcode)) {            flag = this.getCaptchaService().validateResponseForID(id, checkcode);        }         return flag;    }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.