我有一个camelContext拦截器,它像这样调用一个处理器。你可以看到我的spring.xml here。
import org.apache.camel.Processor;
public class CaptureProcessor implements Processor
{
@Override
public void process(Exchange exch) throws Exception
{
....
}
是否可以在Exchange对象中找到客户端的源IP地址?
请注意,通过将Message body提取为HttpServerletRequest来查找IP地址的本文不适用,因为我的是一个简单的REST服务,并且没有实现serverlet。我的输入消息正文是一个字符串。
答案 0 :(得分:0)
Camel交换包含来自请求的http标头。最好的方法是将标头转储到日志中,以找出您的特定代理设置,Web服务器等可用的内容。有几个标题字段可能存在也可能不存在,其中包含客户端的IP:X-Forwarded-For
,X-Client-IP
,X-Real-IP
等
您可以像这样记录标题:
<camel:to uri="log:dump.headers?level=DEBUG&showHeaders=true" />
答案 1 :(得分:0)
您可以使用属性X-forwarded-for
在交换标头中提取 ip :
String ip=exchange.getIn().getHeader("X-forwarded-for");