# GeetestSample **Repository Path**: royedvamp/GeetestSample ## Basic Information - **Project Name**: GeetestSample - **Description**: 基于Geetest的双因子认证示例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-07-25 - **Last Updated**: 2021-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GeetestSample #### 项目介绍 基于Geetest认证的双因子认证示例 ![输入图片说明](https://images.gitee.com/uploads/images/2018/0725/154200_edabe153_1098680.png "QQ20180725-154011@2x.png") ![输入图片说明](https://images.gitee.com/uploads/images/2018/0725/154211_35d7f210_1098680.png "QQ20180725-154027@2x.png") #### Web集成 1. 引入 JS `` 2. 调用初始化函数进行初始化 ``` ajax({ url: "API1接口(详见服务端部署)", type: "get", dataType: "json", success: function (data) { //请检测data的数据结构, 保证data.gt, data.challenge, data.success有值 initGeetest({ // 以下配置参数来自服务端 SDK gt: data.gt, challenge: data.challenge, offline: !data.success, new_captcha: true }, function (captchaObj) { // 这里可以调用验证实例 captchaObj 的实例方法 }) } }) ``` 3.通过 ajax 方式进行二次验证 ``` $("#submit").click(function (e) { var result = captchaObj.getValidate(); if (!result) { $("#notice").html("请先完成验证"); } else { $.ajax({ url: 'login', type: 'POST', dataType: 'json', data: { username: $('#username').val(), password: $('#password').val(), geetest_challenge: result.geetest_challenge, geetest_validate: result.geetest_validate, geetest_seccode: result.geetest_seccode }, success: function (data) { if (data.status === 'success') { alert(data.msg); } else if (data.status === 'fail') { alert(data.msg); } } }) } e.preventDefault(); }); ``` #### 服务端部署 1.初始化(API1),获取流水标识并设置状态码 ``` GeetestLib gtSdk = new GeetestLib(GeetestConfig.getGeetest_id(), GeetestConfig.getGeetest_key(), GeetestConfig.isnewfailback()); String resStr = "{}"; String userid = "test"; //自定义参数,可选择添加 HashMap param = new HashMap(); param.put("user_id", userid); //网站用户id param.put("client_type", "web"); //web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP //进行验证预处理 int gtServerStatus = gtSdk.preProcess(param); //将服务器状态设置到session中 request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus); //将userid设置到session中 request.getSession().setAttribute("userid", userid); resStr = gtSdk.getResponseStr(); PrintWriter out = response.getWriter(); out.println(resStr); ``` 2.二次验证(API2),包括正常流程和宕机情况 ``` GeetestLib gtSdk = new GeetestLib(GeetestConfig.getGeetest_id(), GeetestConfig.getGeetest_key(), GeetestConfig.isnewfailback()); String challenge = request.getParameter(GeetestLib.fn_geetest_challenge); String validate = request.getParameter(GeetestLib.fn_geetest_validate); String seccode = request.getParameter(GeetestLib.fn_geetest_seccode); //从session中获取gt-server状态 int gt_server_status_code = (Integer) request.getSession().getAttribute(gtSdk.gtServerStatusSessionKey); //从session中获取userid String userid = (String)request.getSession().getAttribute("userid"); //自定义参数,可选择添加 HashMap param = new HashMap(); param.put("user_id", userid); //网站用户id param.put("client_type", "web"); //web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP int gtResult = 0; if (gt_server_status_code == 1) { //gt-server正常,向gt-server进行二次验证 gtResult = gtSdk.enhencedValidateRequest(challenge, validate, seccode, param); System.out.println(gtResult); } else { // gt-server非正常情况下,进行failback模式验证 System.out.println("failback:use your own server captcha validate"); gtResult = gtSdk.failbackValidateRequest(challenge, validate, seccode); System.out.println(gtResult); } if (gtResult == 1) { // 验证成功 PrintWriter out = response.getWriter(); JSONObject data = new JSONObject(); try { data.put("status", "success"); data.put("version", gtSdk.getVersionInfo()); } catch (JSONException e) { e.printStackTrace(); } out.println(data.toString()); } else { // 验证失败 JSONObject data = new JSONObject(); try { data.put("status", "fail"); data.put("version", gtSdk.getVersionInfo()); } catch (JSONException e) { e.printStackTrace(); } PrintWriter out = response.getWriter(); out.println(data.toString()); } ``` #### 参与贡献 1. 极验官网 [www.geetest.com/](https://www.geetest.com/)