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閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,810評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,694評論 25 708
  • 體育測試 七、八、九年級測試成績所占比例為3:3:4,即:七年級12分,八年級12分,九年級16分。 具體計算方法...
    guru200閱讀 218評論 0 2
  • 早 昨晚吃的拌面 一點不好吃 再也不吃了 慢慢那種不適合的感覺出現了 莫名其妙 一天可以經歷四季
    做一杯冷靜得水閱讀 102評論 0 0
  • 溺愛成癮(上) 1、 他們一貫都是好脾氣的,尤其年齡最小那個,那次見他們有口角卻是在大家都無心的情況下,進門的時候...
    ATom480e閱讀 421評論 0 0