在我的Camel SpringBoot應用程式中,我發送了一個請求(其中包括一些特定的HTTP頭資訊),并從遠程服務中收到了302。Camel會自動跟隨重定向,但包括之前設定的所有頭資訊,這在另一方造成了一些問題。有什么方法可以控制這種行為嗎?
uj5u.com熱心網友回復:
最明顯的是在Camel路由中用
洗掉特定的頭檔案。.removeHeaders("Camel*")
當然,這必須對每個頭像模式進行處理,如果你有多個出站連接,還必須進行多次。
但是Camel也有 在 HTTP 的情況下,這是 在HTTP的情況下,這是HeaderFilterStrategy的概念。大多陣列件都有一個默認的實作,并被默認使用。
HttpHeaderFilterStrategy。它適用于所有的HTTP連接,并過濾以下頭資訊:HttpHeaderFilterStrategy。
您可以自由地實作您自己的自定義HeaderFilterStrategy或者擴展Camel的一個。然后您可以將其注冊為Spring Bean,并配置您的端點以在需要時使用它。
.to("http:myEndpoint?&headerFilterStrategy=#myHeaderFilter") // myHeaderFilter = Spring Bean的名稱
CodePudding
我能夠通過創建一個自定義的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");
如果(httpResponseContextAttr != null) {
HttpResponse httpResponse = (HttpResponse) httpResponseContextAttr;
int statusCode = httpResponse.getStatusLine().getStatusCode()。
如果(statusCode > 299 && statusCode < 399){
request.removeHeaders("Authorization")。
}
}
}
}
}
然后我將其配置為一個bean:
并在端點中參考了它:
標籤:<spring:bean id="redirectConfigurer" class="com.foo.bar.RedirectHttpClientConfigurer"。
<spring:bean id="redirectConfigurer" class="com.foo.bar.RedirectHttpClientConfigurer"/>
<to uri="http://com.foo.bar?httpClientConfigurer=#redirectConfigurer"/>
