要求がブラウザで発行されたか、それともウィジェットで発行されたかを判断します.

3808 ワード

1、取得要求のrequest
HttpServletRequest request=ServletActionContext.getRequest();

2、遮断器における判断要求ヘッド
通常、携帯端末からの要求かPC端末からの要求かを判断するには、以下の判断が必要です.
request.getHeader( "content-type" ) == null && (request.getheader("user-agent").tolowercase().indexof("mozilla")!=-1)

ただし、ウィジェットが送信するリクエストは、ブラウザ側のリクエストヘッダの「user-agent」属性と一致します.比較すると、2.1ブラウザ側のリクエストヘッダの「アプリケーション/json」はacceptにカプセル化され、リクエストヘッダには「content-type」属性はなく、responseヘッダにのみ含まれる属性であると判断できることが分かった.2.2ウィジェット要求ヘッダには'Content-Type': 'application/json'が設定されており、このようにウィジェット要求ヘッダにおけるこの属性が空ではなく、ブロッキングにおいて「content-type」が空であるか否かを判断して、ウィジェットがPC側から送信されるか否かを判断することができる.2.3判断の場合は「content-type」と「accept」の2つを比較して保険をかけているので、以下のように判断します.
if( request.getHeader( "content-type" ) == null && request.getHeader( "accept" ) != null ) {    
    return "login";//    
}else{
    return "notExist";//     
}

3、これにより、戻り値によって異なる処理を行うことができる
4、もう一つの考え方がありますが、バックグラウンドでフロントがドメイン名アクセスかIPアクセスかを判断することです.
通常はバックグラウンドログインとか、基本的にはドメイン名でアクセスしているような気がするので、ウィジェット側からリクエストされたリクエストは手動でIPリクエストを制御できます.
 /*   ,      IP    ,      ,         */
 public static String PATTERN_L2DOMAIN = "\\w*\\.\\w*:";
 public static String PATTERN_IP = "(\\d*\\.){3}\\d*";

 public static String getCookieDomain(String url) {
      /*  IP     ,  IP */
     Pattern ipPattern = Pattern.compile(PATTERN_IP);
     Matcher matcher = ipPattern.matcher(url);
     if (matcher.find()) {
         System.out.println("[HttpUtil][getCookieDomain] match ip.");
         return matcher.group();
     }

     /*       ,       */
     Pattern pattern = Pattern.compile(PATTERN_L2DOMAIN);
     matcher = pattern.matcher(url);
     if (matcher.find()) {
         System.out.println("[HttpUtil][getCookieDomain] match domain.");
         String domain =  matcher.group();
         /*                  , ~ */
         return domain.substring(0, domain.length() - 1);
     }

     return null;
 }

この考え方は先軫のブログを参考にしている.