Dart客户端HttpRequest错误/身份验证处理

Dart客户端HttpRequest错误/身份验证处理,dart,dart-webui,Dart,Dart Webui,我有一个Dart客户端和一个Java后端。我试图在我的应用程序周围添加安全性,因此Java服务器要求用户在访问数据之前进行身份验证。如果一个webservice调用进入,并且用户未经过身份验证,后端服务将发送一个带有HttpResponseCode(401)的重定向回客户端调用。现在,客户端可以解析request.status并查看401,但它不处理重定向 省道码 HttpRequest request=new HttpRequest(); request.onReadyStateChang

我有一个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服务器

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

      response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      response.setHeader("Location", LOGIN_PAGE);
任何建议都很好。
感谢

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

如果您的客户端是唯一连接到服务器的客户端,并且您不关心格式错误的响应,那么您可以使用


或者您可以直接使用HTTP状态307。

谢谢,我尝试了选项1并阅读了repsoneHeader(“位置”),然后手动重定向到该页面,它就可以工作了。我确实尝试了方案2 b/c,它似乎更好。因此,我在服务器上设置了状态response.setStatus(307);response.setHeader(“位置”,登录页面);但在客户端应用程序上,我的状态为200,重定向不会自动发生。我假设200来自成功的重定向,但是dart页面没有导航到我的登录?哦!不,省道页面不会改变。重定向发生在HttpRequest对象中,而不是主机页。所以我想,选择1是正确的选择。