# 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认证的双因子认证示例


#### 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/)