入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

geetest简单部署

创建时间:2016-07-07 投稿人: 浏览次数:2474

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即可)
<script src="https://static.geetest.com/static/tools/gt.js"></script>
<script src="https://api.geetest.com/get.php"></script>
在填写下面一段代码,这段代码嵌套在form表里面,用于后面的验证
<%--Start  Code--%>
            <div class="row">
        <div id="captcha"></div>//滑动图片验证弹出层
<script src="https://static.geetest.com/static/tools/gt.js"></script>
                <script>
                    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);
                            }
                        }
                    });
                </script>
                <%--End  Code–%>
完成上面步骤,页面部署基本完成。下面则是初始化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/

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。