图片验证码

当注册页面加载时,会向服务器发送请求,会生成一个uuid然后由redis保存,然后将这个uuid返回。、
图片验证码_第1张图片

@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绑定到 scopePostService.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()函数
图片验证码_第2张图片
服务器端操作:
浏览器向服务器发送请求,带了两个参数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();
            }
        }

    }

你可能感兴趣的:(图片验证码)