antibot-server接入说明

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,509评论 25 707
  • 体育测试 七、八、九年级测试成绩所占比例为3:3:4,即:七年级12分,八年级12分,九年级16分。 具体计算方法...
    guru200阅读 202评论 0 2
  • 早 昨晚吃的拌面 一点不好吃 再也不吃了 慢慢那种不适合的感觉出现了 莫名其妙 一天可以经历四季
    做一杯冷静得水阅读 71评论 0 0
  • 溺爱成瘾(上) 1、 他们一贯都是好脾气的,尤其年龄最小那个,那次见他们有口角却是在大家都无心的情况下,进门的时候...
    ATom480e阅读 404评论 0 0