当注册页面加载时,会向服务器发送请求,会生成一个uuid然后由redis保存,然后将这个uuid返回。、
@RequestMapper(/uuid)
public void uuid() {
String uuid = UUID.randomUUID().toString();
baseCacheService.set(uuid, uuid);
baseCacheService.expire(uuid, 3*60);
try {
getResponse().getWriter().write(Response.build().setStatus("1").setUuid(uuid).toJSON());
} catch (Exception e) {
e.printStackTrace();
}
}
将服务器响应的uuid绑定到
scope中,下面执行了PostService.getImg(
scope.uuid),这个操作是在一次向服务器发送请求,服务器会响应回一个图片
@Action(value="validateCode", results={@Result(name="success", type="json")}, params={"contentType", "text/html"})
public void validateCode() {
try {
String tokenUuid = this.getRequest().getParameter("tokenUuid");
String uuids = baseCacheService.get(tokenUuid); // 通过tokenUuid去缓存中找uuid 判断是否存在
if (StringUtils.isNotEmpty(uuids)) {
String codes = ImageUtil.getRundomStr();
String code = codes.toLowerCase();
baseCacheService.del(tokenUuid);
baseCacheService.set(tokenUuid, code);
baseCacheService.expire(tokenUuid, 10*60);
getResponse().addHeader("content-type", "image/x-png");
ImageUtil.getImage(codes, getResponse().getOutputStream());
} else {
getResponse().getWriter().write(Response.build().setStatus("0").setMessage("").toJSON());
}
} catch (Exception e) {
e.printStackTrace();
logger.debug("添加验证码效验", e);
}
}
对录入的验证码进行校验,先判断不为空中,并且是数字与字母组成的,如果没问题,向服务器发送请求,验证是否正确。
录入验证码后,失去焦点调用了authCaptcha()函数
服务器端操作:
浏览器向服务器发送请求,带了两个参数1 signuuid,它就是之前存储的uuid 第2个是signcode,它就是录入的验证码信息。在action中根据signuuid从redis中获取之前存储的验证码信息与signcode对比就可以。
@Action(value="codeValidate", results={@Result(name="success", type="json")}, params={"contentType", "text/html"})
public void codeValidate() {
String signCode = this.getRequest().getParameter("signCode");
String signUuid = this.getRequest().getParameter("signUuid");
try {
if(StringUtils.isEmpty(signCode)){
this.getResponse().setContentType("text/html;charset=UTF-8");
getResponse().getWriter().write(Response.build().setStatus("26").toJSON());
return;
}
if(StringUtils.isEmpty(signUuid)){
this.getResponse().setContentType("text/html;charset=UTF-8");
getResponse().getWriter().write(Response.build().setStatus("0").toJSON());
return;
}
String code = baseCacheService.get(signUuid); //通过key 找到value code
String signCodes = signCode.toLowerCase();
if(StringUtils.isBlank(code)){
this.getResponse().setContentType("text/html;charset=UTF-8");
this.getResponse().getWriter().write(Response.build().setStatus("156").toJSON());
return;
}
if(!signCodes.equals(code)){
this.getResponse().setContentType("text/html;charset=UTF-8");
this.getResponse().getWriter().write(Response.build().setStatus("27").toJSON());
return;
}
this.getResponse().getWriter().write(Response.build().setStatus("1").toJSON());
} catch (Exception e) {
e.printStackTrace();
logger.info("图片验证码:"+e);
try {
this.getResponse().setContentType("text/html;charset=UTF-8");
this.getResponse().getWriter().write(Response.build().setStatus("0").toJSON());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}