All Downloads are FREE. Search and download functionalities are using the official Maven repository.

artoria.spring.feign.FeignRequestTransferInterceptor Maven / Gradle / Ivy

The newest version!
package artoria.spring.feign;

import artoria.spring.RequestContextUtils;
import artoria.util.CollectionUtils;
import artoria.util.StringUtils;
import feign.RequestInterceptor;
import feign.RequestTemplate;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

/**
 * The feign request transfer interceptor.
 * @author Kahle
 */
public class FeignRequestTransferInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        transferHeaders(requestTemplate, Collections.emptyList());
        transferContext(requestTemplate);
        transferOthers(requestTemplate);
    }

    /**
     * Transfer request headers.
     * The request header of the servlet cannot be passed randomly.
     * @param feignRequest The feign request
     * @param headerNames The passed header names
     */
    protected void transferHeaders(RequestTemplate feignRequest, List headerNames) {
        // Transfer request headers.
        if (CollectionUtils.isEmpty(headerNames)) { return; }
        HttpServletRequest request = RequestContextUtils.getRequest();
        if (request == null) { return; }
        Map> headers = new LinkedHashMap>();
        for (String headerName : headerNames) {
            if (StringUtils.isBlank(headerName)) { continue; }
            Enumeration values = request.getHeaders(headerName);
            if (CollectionUtils.isEmpty(values)) { continue; }
            Collection collection = headers.get(headerName);
            if (collection == null) {
                collection = new ArrayList();
                headers.put(headerName, collection);
            }
            CollectionUtils.addAll(collection, values);
        }
        headers.putAll(feignRequest.headers());
        feignRequest.headers(headers);
    }

    /**
     * Transfer the context.
     * @param feignRequest The feign request
     */
    protected void transferContext(RequestTemplate feignRequest) {

    }

    /**
     * Transfer the others.
     * @param feignRequest The feign request
     */
    protected void transferOthers(RequestTemplate feignRequest) {

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy