followRedirects = false时,Mule-ESB HTTP重定向不起作用

时间:2015-10-01 21:29:41

标签: mule mule-studio

我有一个简单的流程,不适用于骡子。在我的设置中,我正在一个端口上侦听HTTP流量并在另一个端口上转发流量,我认为这是最典型的ESB用例。除目标应用程序发出重定向外,代理/网关流程才有效。有谁知道解决这个问题的任何技巧?请注意,我不能使用mule的“HTTP-Proxy模式”,因为我打算为更复杂的用例扩展此流程。

骡流

INFO  2015-10-01 13:01:48,333 [[test2].APP_A_IN.worker.01] org.mule.api.processor.LoggerMessageProcessor: 
org.mule.DefaultMuleMessage
{
Message properties:
  INVOCATION scoped properties:
  INBOUND scoped properties:
    accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    accept-encoding=gzip, deflate, sdch
    accept-language=en-US,en;q=0.8
    cache-control=max-age=0
    connection=keep-alive
    dnt=1
    host=localhost:12344
    http.listener.path=/*
    http.method=GET
    http.query.params=ParameterMap{[]}
    http.query.string=
    http.relative.path=/app_a
    http.remote.address=/127.0.0.1:53372
    http.request.path=/app_a
    http.request.uri=/app_a
    http.scheme=http
    http.uri.params=ParameterMap{[]}
    http.version=HTTP/1.1
    upgrade-insecure-requests=1
    user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
    x-firephp-version=0.0.6
  OUTBOUND scoped properties:
  SESSION scoped properties:
}

案例1:followRedirects = true(默认)

在这种情况下,mule从目标端点获取HTTP 302,并在内部导航到重定向页面并将页面提供给客户端。如果我使用Mule作为某些Web服务的网关,那就太棒了。但是,对于来自浏览器的HTTP流量,如果我们允许这种情况发生,则所有相对URL都将从呈现的页面中断。

案例2:followRedirects = false

在这种情况下,mule从目标端点获取HTTP 302,并在记录后丢弃响应。 Mule只需在浏览器上发送带有空HTML页面的HTTP 200。请参阅下面的案例2.我喜欢将HTTP 302响应发送给最终用户。

请求记录(案例2)

INFO  2015-10-01 13:01:48,420 [[test2].APP_A_IN.worker.01] org.mule.api.processor.LoggerMessageProcessor: 
org.mule.DefaultMuleMessage
{

Message properties:
  INVOCATION scoped properties:
  INBOUND scoped properties:
    date=Thu, 01 Oct 2015 17:01:48 GMT
    http.reason=Moved Temporarily
    http.status=302
    location=http://localhost:8380/app_a/
    server=Apache-Coyote/1.1
    transfer-encoding=chunked
  OUTBOUND scoped properties:
  SESSION scoped properties:
}

已记录响应(案例2)

999999

1 个答案:

答案 0 :(得分:0)

我认为问题在于您没有将请求者的属性复制到侦听器的响应中。我建议在请求者后面使用copy-properties元素。否则入站属性将丢失:您需要它们作为出站点。 但是,http.status等某些属性可能需要使用response-builder显式映射到标头。 HTH