java play框架验证码

使用版本为play 1.2.5根据官方的例子

首先我们生成一个UUID传到register页面上去

public static void register(){
    	String randomID = Codec.UUID();
    	render("/UserControl/register.html",randomID);
    }
然后我们定义一个通过UUID生成验证码的方法

public static void captcha(String id) {
        Images.Captcha captcha = Images.captcha();
        String code = captcha.getText("#E4EAFD");设置验证码颜色
        Cache.set(id, code, "10mn");//缓存在服务端
        renderBinary(captcha);渲染图像
}
在register.html我们定义

<img src="@{UserControl.captcha(randomID)}" style="margin-left: 100px" id="code"><input type="hidden" name="randomID" value="${randomID}" id="hiddenCode"/>
img标签通过传过来的UUID渲染验证码图像,input把传过来的UUID再传回服务器,然后服务器可以验证

validation.equals(
    		validate, Cache.get(randomID)
    		).message("Invalid code. Please type it again");
    		if(validation.hasErrors()) {
    			flash.put("info", "validate error");
				userlogin();
    		}

上面我们对传来的数据做验证validate为页面验证码框传来的字符串,Cache.get(randID)为input hidden传来的UUID取得的数据,如果验证出错,就调用userLogin()跳到其他页面

下面介绍更换验证码的方法

  public static void changeCode(String randomID){
    	Cache.delete(randomID);
    	String ID = Codec.UUID();
    	WebServiceBean bean = new WebServiceBean();
    	bean.result = 0;
    	bean.data = ID;
    	renderJSON(bean);
    }

我们定义一个方法,接受页面传来的验证码UUID,然后在服务端删除它,然后新建一个UUID,返回给请求

然后页面ajax这样处理

$("#changeCode").click(function(event) {
            /* Act on the event */
			event.preventDefault();
            $.ajax({
              url: url+'UserControl/changeCode',
              data: {randomID: '${randomID}'},
            })
            .done(function(data) {
              $("#code").attr('src', url+'UserControl/captcha?id='+data.data);
              $("#hiddenCode").val(data.data);
              //console.log(data);
            })
            .fail(function(data) {
              console.log('error');
            })
            
          });
ajax把页面的uuid传给后台的changeCode方法,然后根据返回来的新的UUID更新img的src和input hidden的value







郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。