
artoria.spring.feign.FeignRequestTransferInterceptor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of artoria-extend Show documentation
Show all versions of artoria-extend Show documentation
Artoria is a java technology framework based on the facade pattern.
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