图片验证码

来源:互联网 发布:英雄无敌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绑定到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()函数
这里写图片描述
服务器端操作:
浏览器向服务器发送请求,带了两个参数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();            }        }    }
原创粉丝点击