概述

行为验证 Java Maven SDK目前提供基于java servlet的demo。

开发环境

条目
兼容性 JAVA SE 1.6及以上
依赖 java-json.jar、servlet-api.jar
应用服务器 tomcat 7及以上

资源导航

条目
产品结构流程 通讯流程
SDK项目地址 gt3-server-maven-sdk

安装 Java SDK

下载SDK

使用命令从Github导入完整项目

git clone https://github.com/GeeTeam/gt3-server-maven-sdk.git

手动下载压缩包文件

Github: gt3-server-maven-sdk下载.zip文件

引入SDK

将sdk项目目录下的/src/main/java/com/geetest/sdk/GeetestLib.java文件拷入您的项目中。

在您的项目中使用以下代码导入sdk

import com.geetest.sdk.GeetestLib;

配置密钥,修改请求参数

配置密钥

极验管理后台获取您的公钥(id)和私钥(key), 并在代码中配置。配置文件路径如下:

/src/main/java/com/geetest/demo/GeetestConfig.java

修改请求参数(可选)

名称 说明
user_id user_id作为终端用户的唯一标识,确定用户的唯一性;作用于提供进阶数据分析服务,可在api1 或 api2 接口传入,不传入也不影响验证服务的使用;若担心用户信息风险,可作预处理(如哈希处理)再提供到极验 ;
client_type 客户端类型,web(pc浏览器),h5(手机浏览器,包括webview),native(原生app),unknown(未知)
ip_address 客户端请求您服务器的ip地址,unknow表示未知

接口示例

初始化(API1),获取流水标识并设置状态码

public class FirstRegisterServlet extends HttpServlet {

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
GeetestLib gtLib = new GeetestLib(GeetestConfig.geetestId,
GeetestConfig.geetestKey);

//自定义参数,可选择添加
String userId = "test";
HashMap<String, String> paramMap = new HashMap<String, String>();
paramMap.put("user_id", userId); //网站用户id
paramMap.put("client_type", "web"); //web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式
paramMap.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP

// 进行一次验证,得到结果
GeetestLibResult result = gtLib.register(paramMap);
//将结果状态设置到session中
request.getSession().setAttribute(
GeetestConfig.GEETEST_SERVER_STATUS_SESSION_KEY,
result.getStatus());
// 将userid设置到session中
// 注意,此处api1接口存入session,api2会取出使用,格外注意session的存取和分布式环境下的应用场景
request.getSession().setAttribute("userId", userId);

PrintWriter out = response.getWriter();

// 注意,不要更改返回的结构和值类型
out.println(result.getData());

}
}

注意:gtServerStatus和success字段是表示api1接口的状态,1表示正常,0表示异常,这两个字段的含义是对应的。

gtServerStatus字段是api1接口存入到session中,api2接口会从session取出这个值并进行后续判断,1就走正常二次验证逻辑,0就走宕机模式逻辑。格外注意分布式部署时session存取的情况,此时建议可使用数据库存储状态值,也可自行设计。

success字段是api1接口返回给前端的值,控制前端的表现形式,1就展现正常页面,0就展示宕机页面。

二次验证(API2),包括正常流程和宕机情况

public class SecondValidateServlet extends HttpServlet {

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
GeetestLib gtLib = new GeetestLib(GeetestConfig.geetestId,
GeetestConfig.geetestKey);

String challenge = request
.getParameter(GeetestConfig.GEETEST_CHALLENGE);
String validate = request.getParameter(GeetestConfig.GEETEST_VALIDATE);
String seccode = request.getParameter(GeetestConfig.GEETEST_SECCODE);

PrintWriter out = response.getWriter();

int gt_server_status_code = 0;
String userId = "";
try {
// 从session中获取一次验证状态码和userId
gt_server_status_code = (Integer) request.getSession()
.getAttribute(GeetestConfig.GEETEST_SERVER_STATUS_SESSION_KEY);
userId = (String) request.getSession().getAttribute("userId");
} catch (Exception e) {
gtLib.gtlog(
"SecondValidateServlet.doPost():二次验证validate:session取key发生异常,"
+ e.toString());
out.println("{\"status\":\"fail\"}");
return;
}

//自定义参数,可选择添加
HashMap<String, String> param = new HashMap<String, String>();
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

GeetestLibResult result = null;
// gt_server_status_code 为1代表一次验证register正常,走正常二次验证模式;为0代表一次验证异常,走failback模式
if (gt_server_status_code == 1) {
//gt-server正常,向极验服务器发起二次验证
result = gtLib.successValidate(challenge, validate, seccode, param);
} else {
// gt-server非正常情况,进行failback模式本地验证
result = gtLib.failValidate(challenge, validate, seccode);
}

// // 注意,不要更改返回的结构和值类型
out.println(result.getData());
}
}

注意:当session中取出status=0时表示极验宕机,此时流程进入failback模式,后续逻辑都是在您的服务器完成,不会再向极验服务器发送网络请求。

本SDK demo中,对于failback模式,只对请求参数做了简单的校验,您也可以自行设计,模拟宕机模式:将验证ID替换为随意一段字符,例如123456789。此时,验证码将进入宕机模式。

运行demo

将demo导出成war包,放到tomcat目录下的webapps文件中,启动tomcat。

在浏览器中访问http://localhost:8080/gt3-server-maven-sdk/login.jsp即可看到demo界面。

二次验证不通过处理方式

二次验证不通过的主要原因及排查方法请参考帮助文档的二次验证失败