在我的Camel SpringBoot应用程序中,我发送了一个请求(其中包括一些特定的HTTP头),并从远程服务接收到了302。Camel会自动跟随重定向,但会包括之前设置的所有头,这会在另一端造成一些问题。有什么方法可以控制这种行为吗?
osh3o9ms1#
最明显的是使用以下命令删除Camel路由中的特定头
.removeHeaders("Camel*")
当然,这必须对每个报头模式进行,如果您有多个出站连接,还必须多次进行。但是Camel也有HeaderFilterStrategy的概念。大多数组件都有默认使用的默认实现。对于HTTP,这是HttpHeaderFilterStrategy。它适用于所有HTTP连接,并过滤以下标头:
HeaderFilterStrategy
HttpHeaderFilterStrategy
您可以自由地**实现您自己的自定义HeaderFilterStrategy**或扩展Camel之一。然后,您可以将其注册为Spring bean,并配置您的端点在需要时使用它。
.to("http:myEndpoint?&headerFilterStrategy=#myHeaderFilter") // myHeaderFilter = name of the Spring bean
aiqt4smr2#
我能够通过创建一个自定义HTTP配置器来解决这个问题,该配置器向请求添加一个拦截器,例如。
public class RedirectHttpClientConfigurer implements HttpClientConfigurer { @Override public void configureHttpClient(HttpClientBuilder clientBuilder) { clientBuilder.addInterceptorFirst(new RedirectInterceptor()); } public class RedirectInterceptor implements HttpRequestInterceptor { @Override public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { Object httpResponseContextAttr = context.getAttribute("http.response"); if (httpResponseContextAttr != null) { HttpResponse httpResponse = (HttpResponse) httpResponseContextAttr; int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode > 299 && statusCode < 399) { request.removeHeaders("Authorization"); } } } } }
然后我将其配置为bean:
<spring:bean id="redirectConfigurer" class="com.foo.bar.RedirectHttpClientConfigurer"/>
并在端点中引用它:
<to uri="http://com.foo.bar?httpClientConfigurer=#redirectConfigurer"/>
2条答案
按热度按时间osh3o9ms1#
最明显的是使用以下命令删除Camel路由中的特定头
当然,这必须对每个报头模式进行,如果您有多个出站连接,还必须多次进行。
但是Camel也有
HeaderFilterStrategy
的概念。大多数组件都有默认使用的默认实现。对于HTTP,这是
HttpHeaderFilterStrategy
。它适用于所有HTTP连接,并过滤以下标头:您可以自由地**实现您自己的自定义
HeaderFilterStrategy
**或扩展Camel之一。然后,您可以将其注册为Spring bean,并配置您的端点在需要时使用它。aiqt4smr2#
我能够通过创建一个自定义HTTP配置器来解决这个问题,该配置器向请求添加一个拦截器,例如。
然后我将其配置为bean:
并在端点中引用它: