GETリクエストを達成するためのフィルタパラメータのzuulゲートウェイ交換

需要がゲートウェイ層でのパラメータの一部を置き換えるために行われる必要があるとして、ここだけGETリクエストのために、以下のようにして、何を記録

輸入com.netflix.zuul.ZuulFilter。
輸入com.netflix.zuul.context.RequestContext; 
輸入org.apache.commons.lang3.StringUtils。
輸入org.slf4j.Logger。
輸入org.slf4j.LoggerFactory; 
輸入org.springframework.beans.factory.annotation.Autowired; 
輸入org.springframework.cloud.netflix.zuul.filters.support.FilterConstants。
輸入org.springframework.stereotype.Component。

インポートのjavax.servlet.http.HttpServletRequest; 
輸入java.util.HashMapを; 
輸入java.util.LinkedList; 
輸入はjava.util.List; 
輸入java.util.Map; 

/ ** 
 *过滤参数
 * 
 * @author 
 * 2019年5月17日10時01分
 * / 
@Component
パブリッククラスParametersFilterはZuulFilter {延び

    プライベート静的最終ロガーロガー= LoggerFactory.getLogger(ParametersFilter.class)を、

    プライベート静的最終文字列KEY =「PARAMETER_FILTER_KEY」。

    @Override 
    パブリック文字列のfilterType(){ 
        FilterConstants.PRE_TYPEを返します。
    } 

    @Override 
    公共INT filterOrder(){ 
        リターン9。
    } 

    @Override 
    パブリックブールshouldFilter(){ 
        trueを返します。
    } 

    @Override 
    パブリックオブジェクトラン(){ 

        //获取到要求
        RequestContextのCTX = RequestContext.getCurrentContext()。
        要求= ctx.getRequestたHttpServletRequest(); 

        試み{ 
            //ノックダウン場合
           // TODO 

            //複数の変換を再試行エラーを防ぐ
            ブールisConver =(ブール)request.getAttribute(KEY); 
            IFを(!= NULL && isConver isConver){ 
                ヌルリターン; 
            } 

            文字列方法request.getMethod =(); 
            logger.info( "置換法を要求する} {、URL = {}"、方法、Request.getRequestURI()); 

            // GETメソッド
            であれば( "GET" .equals(method.toUpperCase())){ 
                //取得パラメータ
                マップ<文字列、文字列[]>なparameterMap = request.getParameterMap()。
                IF(なparameterMap == NULL){
                    ヌルを返します。
                } 
                //替换、业务逻辑
                地図<文字列、リストの<string >> requestQueryParams = ctx.getRequestQueryParams(); 
                IF(requestQueryParams == NULL){ 
                    requestQueryParams =新規HashMapの<>(parameterMap.size()* 2)。
                } 
                (文字列キー:parameterMap.keySet())のための{ 
                    文字列[]の値= parameterMap.get(キー)。
                    一覧<文字列> VALUELIST =新しいLinkedListは<>(); 
                    (String値:値)のための{ 
                        valueList.add(変化(値))。
                    }
                    requestQueryParams.put(キー、値リスト); 
                } 
                //書き込みパラメータ
                ctx.setRequestQueryParams(requestQueryParams); 
                logger.info( "完全な翻訳、URL = {}"、Request.getRequestURI()); 
            } 
        }キャッチ(例外E ){ 
            LOGGER.error( "パラメータ置換例外:{}"、E); 
        } {最後に
            trueにrequest.setAttribute(KEY); 
        } 

        戻りNULL; 
    } 

    / ** 
     *交換
     * 
     * @paramデータデータ
     * @return変換データの後に
     * / 
    プライベートの変更文字列(Stringデータ){ 
        // TODO
        データを返します。
    } 

}

 

おすすめ

転載: www.cnblogs.com/hdllhd/p/11284306.html