传输日期头从Camel DefaultHeaderFilterStrategy中删除



我试图从两个头字段中获得授权的REST API:授权和日期,但日期字段已从DefaultHeaderFilterStrategy中删除。我试图用我的过滤器替换它,并将其设置为Jetty客户端,但日期头仍然缺少RequestProcessor和RestProcessor。我需要为所有请求全局传输这个header。这是我的一部分代码。

@Component
public class RestAPIClientRoute extends RouteBuilder {
@Autowired
private CamelContext camelContext;
@Override
public void configure() throws Exception {

JettyHttpComponent jettyComponent = camelContext.getComponent("jetty", JettyHttpComponent.class);
jettyComponent.setHeaderFilterStrategy(new HeaderFilter());

restConfiguration().component("jetty").scheme("http").port(80).host("localhost");    

interceptSendToEndpoint("rest:post:*").process(new Processor() {
public void process(Exchange exchange) {
Properties authProperties = CryptoUtil.duoAuthRequestEncode( duoConfig,"POST", exchange);
Message msg = exchange.getMessage();
msg.setHeader("Authorization", "Basic " + authProperties.getProperty("auth"));
msg.setHeader("Date", authProperties.getProperty("timestamp"));
}
});

rest("/rest")
.post("/accounts/v1/account/list")
.to("direct:hello");
from("direct:hello")
.process(new RequestProcessor());
from("timer:rest-client?period=60s")
.to("direct:accountList");

from("direct:accountList")
.to("rest:post:/rest/accounts/v1/account/list")
.process(new RestProcessor());

}
}

@Component
public class HeaderFilter implements HeaderFilterStrategy {
@Override
public boolean applyFilterToCamelHeaders(String headerName, Object headerValue, Exchange exchange) {
return false;
}
@Override
public boolean applyFilterToExternalHeaders(String headerName, Object headerValue, Exchange exchange) {
return false;
}
}

实际上问题来自REST组件。他设置了HeaderFilter,它覆盖了HTTP组件中其他设置的过滤器。REST组件不能设置HeaderFilterStrategy,总是使用默认的。我开始只使用http组件设置我的自定义过滤器,而不是休息,现在可以从DefaultHeaderFilterStrategy传输已删除的头。

我替换它

.to("rest:post:/rest/accounts/v1/account/list")

.setHeader(Exchange.HTTP_METHOD, constant("POST"))
.setHeader(Exchange.HTTP_QUERY, constant(urlQuery))
.to("https://host.domain.com/rest/accounts/v1/account/list")

相关内容

  • 没有找到相关文章