处理Flex应用程序中的重定向URL?

时间:2010-04-01 15:17:30

标签: flex http spring url blazeds

我们有一个Flex客户端和一个使用Spring / Blazeds项目的服务器。

用户登录并通过身份验证后,Spring安全层会将重定向发送到新URL,这是我们的主应用程序所在的位置。

但是,在flex客户端中,我正在使用HTTPService作为初始请求,我将重定向页面完整地发回给我。

如何获取网址以便我可以使用navigatetourl来获取应用程序所需的位置?

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

一种解决方案是在返回页面的注释块中包含一个令牌,例如:

<!-- redirectPage="http://localhost/new-location" -->

然后检查它是否存在于HTTPService结果处理程序中。然后可以在调用navigateToURL时使用令牌的值。

另一种解决方案是检查HTTP响应标头并使用ActionScript提取“Location”标头的值。考虑使用AS3 HTTP Client lib。

从示例页面http://code.google.com/p/as3httpclientlib/wiki/Examples确定响应中的“位置”标题:

var client:HttpClient = new HttpClient();

var uri:URI = new URI("http://localhost/j_security_check");

client.listener.onStatus = function(event:HttpStatusEvent):void {
  var response:HttpResponse = event.response;
  // Headers are case insensitive

  var redirectLocation:String = response.header.getValue("Location");
  // call navigateToURL with redirectLocation
  // ... 
};

// include username and password in the request

client.post(uri);

注意:AS3 HTTP客户端依赖于AS3 Core和AS3 Crypto库。

答案 1 :(得分:0)

您也可以简单地使用URLLoader类,无需外部代码。其发送的事件之一是HTTPStatusEvent.HTTP_RESPONSE_STATUS。只需插入并检索重定向的URL:

urlLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onHTTPResponseStatus);
private function onHTTPResponseStatus(event:HTTPStatusEvent):void
{
    var responseURL:String = event.responseURL;
}

我现在(成功)使用此代码,因此如果因某些原因无效,请告诉我。