您的位置:首页 > 编程语言 > Java开发

geetest简单部署

2016-03-09 14:33 525 查看
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java geetest