geetest php,geetest简单部署

http://blog.csdn.net/Y9CLONG/article/details/50835127

geetest开发体验,写一下快速搭建geetst的步骤(极简模式)

已java为例

首先,我们去geetest注册一个账号 ,拿到验证所需的captcha_id和private_key(不想注册的同学可以使用下面提供测试id和key)

captcha_id:b46d1900d0a894591916ea94ea91bd2c

private_key:36fc3fe98530eea08dfc6ce76e3d24c4

然后是前端页面(弹出模式验证)

需引入(若为http协议,只需将https改为http即可)

在填写下面一段代码,这段代码嵌套在form表里面,用于后面的验证

var handler = function (captchaObj) {

// 将验证码加到id为captcha的元素里

captchaObj.appendTo("#captcha");//弹出层

captchaObj.bindOn("#loginSubmit");//弹出模式指定的触发事件

};

$.ajax({

// 获取id,challenge,success(是否启用failback)

url: "https://sso.yoju360.com/gt/init.do",//将调用这个接口进行初始化,这是我本地方法。后面会有介绍如何使用,若是http协议,直接改为http即可

type: "get",

dataType: "json", // 使用jsonp格式

success: function (data) {

if(data!=null){

// 使用initGeetest接口

// 参数1:配置参数,与创建Geetest实例时接受的参数一致

// 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件

initGeetest({

gt: data.gt,

challenge: data.challenge,

product: "popup", // 产品形式 弹出

https : true,

offline: !data.success

}, handler);

}

}

});

完成上面步骤,页面部署基本完成。下面则是初始化geetest的接口(geetest有提供demo)

@RequestMapping(value = "/init.do")

public void init(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

if(Boolean.parseBoolean(gt_open)){//极验验证,这是我自己添加的是否启动验证的开关,无需要可以直接去掉

//开启

GeetestLib gtSdk = new GeetestLib(captcha_id, private_key);//GeetestLib由geetest直接提供,大家可以去官网直接下载,官网在页面底部给出

String resStr = "{}";

//进行验证预处理

int gtServerStatus = gtSdk.preProcess();

//将服务器状态设置到session中

request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus);//放入session,用于后面的验证

resStr = gtSdk.getResponseStr();

PrintWriter out = response.getWriter();

out.println(resStr);

}

}

完成这一步,可以在页面看见滑动图片验证效果了

看到这种效果,就代表前面部署成功,还剩下最后一步,就是通过在后台的验证

图片滑动验证成功后,则会进行表单提交,跳转到后台,还记得前面的 request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus);这行代码吗

后面,我们可以获得表单提交过来的验证信息,进行对比验证。

下面是验证方法代码

/**

* 使用post方式,返回验证结果, request表单中必须包含challenge, validate, seccode

*/

public class VerifyLogin  {

private static final long serialVersionUID = 244554953219893949L;

private final static String captcha_id = PropertyUtils.get("gt_captcha_id");

private final static String private_key = PropertyUtils.get("gt_private_key");

public boolean Verify(HttpServletRequest request) throws ServletException, IOException {

GeetestLib gtSdk = new GeetestLib(captcha_id, private_key);

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);

String gtResult = "fail";

if (gt_server_status_code == 1) {

//gt-server正常,向gt-server进行二次验证

gtResult = gtSdk.enhencedValidateRequest(challenge, validate, seccode);

System.out.println(gtResult);

} else {

// gt-server非正常情况下,进行failback模式验证

System.out.println("failback:use your own server captcha validate");

gtResult = gtSdk.failbackValidateRequest(challenge, validate, seccode);

}

if (gtResult.equals(GeetestLib.success_res)) {

// 验证成功

//            PrintWriter out = response.getWriter();

//            out.println(GeetestLib.success_res + ":" + gtSdk.getVersionInfo());

return true;

} else if (gtResult.equals(GeetestLib.forbidden_res)) {

// 验证被判为机器人

//            PrintWriter out = response.getWriter();

//            out.println(GeetestLib.forbidden_res + ":" + gtSdk.getVersionInfo());

return false;

} else {

// 验证失败

//            PrintWriter out = response.getWriter();

//            out.println(GeetestLib.fail_res + ":" + gtSdk.getVersionInfo());

return false;

}

}

}

上面代码可以写成公共方法,写好后,我们可以在任意地方进行验证。

比如,以user-cas为例

在这里我使用verifyLogin.Verify()进行验证,验证通过就继续往下执行,不通过就中断业务返回错误

geetest技术文档地址:http://www.geetest.com/install/

geetest官网:http://www.geetest.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值