Dart Client HttpRequest错误/身份验证处理

时间:2013-08-29 19:23:10

标签: dart dart-webui

我有一个Dart客户端和一个Java后端。我正在尝试在我的应用程序周围添加安全性,因此Java服务器要求用户在访问数据之前进行身份验证。如果进入webservice调用并且用户未被认证,则后端服务将具有HttpResponseCode(401)的重定向发送回客户端调用。我现在已经知道客户端可以解析request.status并查看401但它不处理重定向。

飞镖码

HttpRequest request=new HttpRequest();
  request.onReadyStateChange.listen((_) {
    if (request.readyState == HttpRequest.DONE &&
        (request.status == 200 || request.status == 0)) {
      onHistoryLoaded(request.responseText);
    }
  });

  request.open("GET", url);
  request.send();
  request.onLoadEnd.listen((e) => processRequest(request));
  request.onError.listen((Object error)=>handleError(error));

void processRequest(HttpRequest request) {
  var status = request.status;
  print("status $status"); //401
}

void handleTheError(Error e){
  print("handleTheError Request error: $e");
}

Java Server

//Tried both of these
//    response.setStatus(HttpStatusCodes.STATUS_CODE_UNAUTHORIZED);
//    response.sendRedirect(LOGIN_PAGE);

      response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      response.setHeader("Location", LOGIN_PAGE);

任何建议都会很棒。 感谢

1 个答案:

答案 0 :(得分:2)

首先,只有HTTP状态代码201和一些3xx代码才允许使用Location标头。相反,在有效的HTTP响应中,状态代码401需要发送“WWW-Authenticate”头字段 - 这可能不是您想要的。这就是你的重定向没有被自动跟踪的原因。

如果您的客户是唯一一个连接到服务器并且您不关心格式错误的响应的客户,则可以使用getResponseHeader("Location")

阅读客户端上的标题

或者您可以改为使用HTTP状态307。