zuul gateway replacement of the filter parameters to achieve the GET request

As the demand needs to be done to replace some of the parameters at the gateway layer, hereby record what, in the following manner only for the GET request

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

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * 过滤参数
 *
 * @author 
 *         2019-5-17 10:01
 */
@Component
public class ParametersFilter extends ZuulFilter {

    private static final Logger LOGGER = LoggerFactory.getLogger(ParametersFilter.class);

    private static final String KEY = "PARAMETER_FILTER_KEY";

    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return 9;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {

        // 获取到request
        RequestContext ctx = RequestContext.getCurrentContext();
        Request = ctx.getRequest the HttpServletRequest (); 

        the try { 
            // if knockdown 
           // TODO 

            // prevent error retry multiple conversions 
            Boolean isConver = (Boolean) the request.getAttribute (KEY); 
            IF (! = Null && isConver isConver) { 
                null return; 
            } 

            String method request.getMethod = (); 
            logger.info ( "will request replacement method} {, URL = {}", method, Request.getRequestURI ()); 

            // GET method 
            if ( "the GET" .equals (method.toUpperCase ())) { 
                // Get parameter 
                Map <String, String []> parameterMap = request.getParameterMap ();
                if (parameterMap == null) {
                    return null;
                }
                //替换,业务逻辑
                Map<String, List<String>> requestQueryParams = ctx.getRequestQueryParams();
                if (requestQueryParams == null) {
                    requestQueryParams = new HashMap<>(parameterMap.size() * 2);
                }
                for (String key : parameterMap.keySet()) {
                    String[] values = parameterMap.get(key);
                    List<String> valueList = new LinkedList<>();
                    for (String value : values) {
                        valueList.add(change(value));
                    }
                    requestQueryParams.put (Key, valueList); 
                } 
                // write parameters 
                ctx.setRequestQueryParams (requestQueryParams); 
                logger.info ( "complete translation, URL = {}", Request.getRequestURI ()); 
            } 
        } the catch (Exception E ) { 
            LOGGER.error ( "parameter substitution exception: {}", E); 
        } {the finally 
            request.setAttribute (KEY, to true); 
        } 

        return null; 
    } 

    / ** 
     * replacement 
     * 
     * @param data data 
     * @return translation after the data 
     * / 
    Private Change String (String data) { 
        // TODO
        return data;
    }

}

 

Guess you like

Origin www.cnblogs.com/hdllhd/p/11284306.html