美文网首页
antibot-server接入说明

antibot-server接入说明

作者: unsigned龙 | 来源:发表于2016-05-05 18:45 被阅读0次

title: antibot-server接入说明

date:2016-05-05

tags:


1、对于已使用ng-common-0.4.31 RPC的接入方

1.1、新增配置项
1.1.1、在define.conf中

# RPC本地调试时的antibot_server地址-开发时用到
antibot_server.test=http://100.84.51.184:9027

#调用antibot_server的caller&key,无需配置,配置好rpc.caller和rpc.key即可

1.1.2、在application.conf中

antibot_server.test.host=${antibot_server.test}

1.2、引入jar包

引入antibot-server-api-xxx.jar,其中xxx是版本号。
antibot-server-api-xxx.jar当前还没有上传到nexus库,如需最新版本,请找我要。

1.3、示例:业务方页面接入ua.js

在页面最底部(body结束之前),加入如下代码片段:

    <body>
    <!--页面主体及业务js-->
    <script>
    var UA_Opt={Flag:16676992};//ua.js的配置
    function (doc, tagName, tagId, src) {
                a = doc.createElement(tagName);
                m = doc.getElementsByTagName(tagName)[0];
                a.async = 1;
                a.id = tagId;
                a.src = src;
                m.parentNode.insertBefore(a, m);
          }(document, 'script', 'uajs', "/ua.js?siteId=<你的siteId>");
    </script>
    </body>

在发起业务请求时,获取ua密文;在complete时,切换token。例如:

    $.ajax({
        type: "POST", 
        url: that.user.upCoinsUrl,
        data: {
             uid: uid, 
             shareId: shareId, 
             coins: coinsBuilt, 
             ua:UA_Opt.getUA() //字段名通常是ua,与第4步中从Reqeust.current()中获取的参数名保持一致即可
        }, 
        complete:function(){
            UA_Opt.reload(true); //异步地切换token
        }
        dataType: "json", 
        timeout: 30000
        //其他属性...
    });
1.4、示例:业务方服务器调用评估风险接口
    /**
     *  测试antibot_server提供的接口
     */
    public static void antibotEstimate(){
        
        Request req = Request.current();
        String uaCipher = req.param.get("ua");
        if(StringUtils.isEmpty(uaCipher)){
            // ua密文不存在,高风险,请处理
            ResponseHelper.sendError(...);
        }
        RuleApiService ruleServ = RPC.look(RuleApiService.class);
        RuleEstimateRequest req = new RuleEstimateRequest();
        req.setUaCipher(uaCipher);
        req.setRules(buildRules("dafde23ccde0a"));
        try{
            RuleEstimateResponse resp = ruleServ.estimate(req,"?siteId=<你的siteId>");
            int riskLevel = resp.getRiskLevel();
            if(riskLevel>=4){
                //高风险
            }
        }catch(ApiException e){
            //处理业务参数错误,业务码说明请参见接口描述文档
            int errCode = e.getErrorCode();
            if(errCode==RuleStatusCode.DECODE_FAILURE.getCode()){
                //解码失败,可视为高风险
            }else{
                //多半是请求参数有问题,请调整
            }
        }catch(RpcException e){
            //处理rpc调用出错(如调用超时)
        }       
    }
    
    /** 构造规则
     * @param submitBtnId 提交按钮的id
     * @return List<Rule> 
     */
    private static List<Rule> buildRules(String submitBtnId){
        return Arrays.asList(new Rule[]{
            new Rule(COND.TOKEN),//页面token合法
            new Rule(COND.BROWSER_PLATFORM),//浏览器平台APP特征合法
            new Rule(COND.TAP_TARGET,OP.EQ, submitBtnId),//提交按钮的点击事件
            new Rule(COND.FOCUS,OP.EXIST),//存在焦点事件
            new Rule(COND.BLUR,OP.EXIST),//存在失焦事件
            new Rule(COND.TAP_INTERVAL,OP.GE,"15"),//按下抬起间隔>=15ms
            new Rule(COND.LOCATION,OP.MATCH,"http://wanke.9game.cn/xxx/comment"),//发出请求的页面的地址格式满足正则表达式
            new Rule(COND.PAGE_STAY,OP.GE,"2000")//页面停留时间最少2000ms
        });
    }
1.5、业务方后台请求ua.js及token

当部署结构满足下图时,只需上述四步即可完成接入:


antibot_server应用示例

但,当运维不支持将antibot_server直接对外提供/ua.js和/utk时,只能通过业务方web后台(即图中wk_web)向antibot_server转调这两个接口,并将结果返回给浏览器。这种情况下,业务方web后台需要再写两个方法,用于响应浏览器的/ua.js和/utk请求,代码如下:

public class UajsController extends Controller {
    private static UajsApiService uajsServ = RPC.look(UajsApiService.class);
    /**
     * 响应ua.js
     * 
     * @param siteId
     *            业务方站点id
     * @param siteId
     *            void
     */
    @UnneedAccountSdkHandle
    @NoUcidPretreat
    @DisableBeforeCache
    public static void serveUajs(String siteId) {
        Map<String,Object> resp = uajsServ.getUajs(buildSearchStr(siteId));
        String jsContent = (String)resp.get("content");
        throw new RenderJS(jsContent);
    }

    static class RenderJS extends Result {
        String text;
        public RenderJS(CharSequence text) {
            this.text = text.toString();
        }
        public void apply(Request request, Response response) {
            try {
                jws.Logger.debug("[UajsController RenderJS] apply...");
                setContentTypeIfNotSet(response, "application/javascript; charset=utf-8");
                response.out.write(text.getBytes("utf-8"));
                jws.Logger.debug("[UajsController RenderJS] apply finished.");
            } catch (Exception e) {
                throw new UnexpectedException(e);
            }
        }
    }

    /**
     * 响应页面token请求
     * 
     * @param siteId
     *            业务方站点id 生成动态token
     */
    @UnneedAccountSdkHandle
    @NoUcidPretreat
    @DisableBeforeCache
    public static void serveToken(String siteId) {
        throw new RenderText(uajsServ.getToken(buildSearchStr(siteId)));
    }
    
    private static String buildSearchStr(String siteId){
        if(StringUtils.isNotBlank(siteId)){
            return String.format("?siteId=%s", siteId);
        }else{
            return "";
        }
    }
}

同时,需要再业务方web后台的routes中,新增如下配置:

GET        /ua.js            UajsController.serveUajs
GET        /utk              UajsController.serveToken

相关文章

  • antibot-server接入说明

    title: antibot-server接入说明 date:2016-05-05 tags: 1、对于已使用ng...

  • DFPlayer接入说明

    原文请看: https://ihoudf.github.io/2017/10/26/DFPlayer%E6%8E...

  • Tinker 接入

    Tinker 热补丁接入过程中的坑!!! =============== Tinker 介绍 官方接入说明 gra...

  • Native Crash 捕获SDK接入使用说明

    Native Crash 捕获SDK接入使用说明 1 aar形式接入 1.1导入nativeCrashSdk.ar...

  • 阿里百川接入记录

    官方接入文档 官方Demo 以下说明是基于4.0.0.8版本记录通过以上的官方说明可以正常接入。遇到的问题Demo...

  • VK接入

    VK接入 官方SDK下载和接入说明[https://github.com/VKCOM/vk-ios-sdk] 官方...

  • Bugly热修复,痛苦的接入

    说明 要是打算接入热修复或者要学习热修复的同学,要是打算接入Tinker的,我劝你直接放弃,接入Bugly,都是马...

  • BSN专有节点接入说明

    专有节点接入说明 在完成项目的创建后,系统会为每个项目创建对应框架所需要的接入信息,用户在访问区块链节点时进行接入...

  • 阿里百川-3.1.1.96接入

    接入之前要先看看:准备工作百川接入说明SDK3.1接入文档这个sdk最好手动导入,用pod导入sdk的时候,登录一...

  • 2018-03-14

    {ECShop} 协议文档说明 api.access.json - 接入 api.areacode.json - ...

网友评论

      本文标题:antibot-server接入说明

      本文链接:https://www.haomeiwen.com/subject/bcbdrttx.html