图片验证码
来源:互联网 发布:英雄无敌5 mac版 编辑:程序博客网 时间:2024/06/06 17:39
当注册页面加载时,会向服务器发送请求,会生成一个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绑定到
@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(); } } }
阅读全文
0 0
- C#图片验证码
- 图片验证码
- 图片验证码
- 图片验证码
- 获取验证码图片
- jsp验证码图片
- PHP图片验证码
- 图片验证码
- 图片验证码
- 验证码图片显示
- 中文图片验证码
- 验证码图片生成
- jsp图片验证码
- 生成图片验证码
- 图片验证码
- 绘制验证码图片
- java图片验证码
- java图片验证码
- JAVA——动态代理
- SpringMVC和Struts2中拦截器实现思路思想
- 问题 G: 整数转字符串
- Java操作符
- HDOJ 2016 数据的交换输出
- 图片验证码
- 把OSC_IN/OSC_OUT引脚作为GPIO端口PD0/PD1
- Django模型字段常用的类型
- TensorFlow入门教程
- HDOJ 2017 字符串统计
- java.lang.ClassNotFoundException: org.quartz.JobDetail Spring与Quartz的整合实现定时任务调度
- Leetcode 刷题之哈希表
- JSP 中EL表达式用法
- Foundation5(一)