谷歌(Google): reCaptcha(2.0版本)做网站验证码

百度百科:

         CMU设计了一个名叫reCAPTCHA的强大系统,让他们的电脑去向人类求助。具体做法是:将OCR软件无法识别的文字扫描图传给世界各大网站,用以替换原来的验证码图片;那些网站的用户在正确识别出这些文字之后,其答案便会被传回CMU。

使用前需注意: 
1.reCaptcha官网网站为:https://developers.google.com/recaptcha/(需要)
2.在国内使用的话,需要将demo中所有的www.google.com替换成www.recaptcha.net不然无法使用reCAPTCHA
3.使用reCaptcha需要去注册google账号,并且去https://www.google.com/recaptcha/admin里面去创建秘钥对()稍等我会标注出来)

reCaptcha方式选择:
1.显示
2.隐式
3.Android

实践第一种(显示):
1.创建google账号,访问https://www.google.com/recaptcha/admin创建秘钥对
谷歌(Google): reCaptcha(2.0版本)做网站验证码_第1张图片

谷歌(Google): reCaptcha(2.0版本)做网站验证码_第2张图片
2.前端:
 




    
    
    
    



3.服务端
 

    @RequestMapping("/check")
    @ResponseBody
    public String check(HttpServletRequest request) {
        String checkCode = request.getParameter("g-recaptcha-response");
        Map map = new HashMap<>();
        // 私钥
        map.put("secret", "6Ldnn3cUAAAAADcNDxCOnw_oBV_k0JsvdBMF-KEI");
        map.put("response", checkCode);
        String json = MyHttpRequest.sendPost("https://www.recaptcha.net/recaptcha/api/siteverify", map, "UTF-8");
        return json;
    }

实践第二种(隐式):
1.去创建秘钥对,步骤一样,只不过是这里选择项,选择改成第二个了,然后获取新的秘钥对
谷歌(Google): reCaptcha(2.0版本)做网站验证码_第3张图片

谷歌(Google): reCaptcha(2.0版本)做网站验证码_第4张图片
2.前端
 



    reCAPTCHA demo: Simple page
    
    



3.服务端
 

    @RequestMapping("/check2")
    @ResponseBody
    public String check2(HttpServletRequest request) {
        String checkCode = request.getParameter("g-recaptcha-response");
        Map map = new HashMap<>();
        // 私钥
        map.put("secret", "6LfcoXcUAAAAAE-G2qDI19ZR5r96sY_f5i6mVWNi");
        map.put("response", checkCode);
        String json = MyHttpRequest.sendPost("https://www.recaptcha.net/recaptcha/api/siteverify", map, "UTF-8");
        return json;
    }

第一种效果:
谷歌(Google): reCaptcha(2.0版本)做网站验证码_第5张图片
 第二种效果:


服务端调用https://www.recaptcha.net/recaptcha/api/siteverify,返回来的错误码:
 

Error code Description
missing-input-secret The secret parameter is missing.
invalid-input-secret The secret parameter is invalid or malformed.
missing-input-response The response parameter is missing.
invalid-input-response The response parameter is invalid or malformed.
bad-request The request is invalid or malformed.

对于错误,封装了一下,仅供参考:
 

    /**
     * 校验前端传递的recaptcha v2.0图形验证码
     *
     * @param checkCode 验证码
     * @throws Exception
     */
    public static void checkCodeV2(String checkCode) throws Exception {
        if (StringUtils.isEmpty(checkCode)) {
            logger.error("对方法method :【check2】,参数【checkCode】空指针异常!");
        }
        try {
            Map checkMap = new HashMap<>();
            checkMap.put("secret", secret);
            checkMap.put("response", checkCode.trim());
            String json = HttpRequest.sendPost(verifyUrl, checkMap, "UTF-8");
            Map resultMap = new Gson().fromJson(json, new TypeToken>() {
            }.getType());
            System.out.println(json);
            boolean resultCode = (boolean) resultMap.get("success");
            if (!resultCode) {
                String errorCode = resultMap.get("error-codes").toString();
                String errorInfo = null;
                if (StringUtils.isEmpty(errorCode)) {
                    errorInfo = errorCode;
                } else if (errorCode.contains("missing-input-secret")) {
                    errorInfo = "私钥参数丢失了。";
                } else if (errorCode.contains("invalid-input-secret")) {
                    errorInfo = "私钥参数无效或格式不正确。";
                } else if (errorCode.contains("missing-input-response")) {
                    errorInfo = "响应参数缺失。";
                } else if (errorCode.contains("invalid-input-response")) {
                    errorInfo = "响应参数无效或格式不正确。";
                } else if (errorCode.contains("bad-request")) {
                    errorInfo = "请求无效或格式不正确。";
                }
                logger.info("对方法method :【check2】进行图形验证不通过,返回结果是: " + errorInfo);
                
            }
        } catch (Exception e) {
            logger.error("对方法method :【check2】,参数【checkCode】验证过程中异常!"+e.getMessage());
        }
    }

 

你可能感兴趣的:(#,JAVA实现功能)