2
我有一个Dart客户端和一个Java后端。我试图围绕我的应用程序添加安全性,因此Java服务器需要用户在访问数据之前进行身份验证。如果web服务调用进入并且用户未被认证,则后端服务发送具有HttpResponseCode(401)的重定向回到客户端调用。我现在知道客户端可以解析request.status并查看401,但它不处理重定向。Dart客户端HttpRequest错误/身份验证处理
飞镖代码
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);
任何建议将是巨大的。 谢谢
谢谢,我试过选项1并阅读repsoneHeader(“位置”),然后手动重定向到该页面,它的工作。我确实尝试了选项2 b/c,似乎更好。所以在服务器上,我设置了状态\t response.setStatus(307); response.setHeader(“Location”,LOGIN_PAGE);但在客户端应用程序中,我得到的状态为200,重定向不会自动发生。我假设200来自成功的重定向,但飞镖页面没有导航到我的登录? – Brandon
哦!不,飞镖页面不会改变。重定向发生在HttpRequest对象中,而不是主机页面。所以...我猜,选项1是最好的选择。 – MarioP