다트 클라이언트와 자바 백엔드가 있습니다. 내 응용 프로그램 주위에 보안을 추가하려고하므로 Java 서버는 사용자가 데이터에 액세스하기 전에 인증을 받아야합니다. 웹 서비스 호출이 들어오고 사용자가 인증되지 않은 경우 백엔드 서비스는 HttpResponseCode (401)를 사용하여 클라이언트 호출로 리디렉션을 보냅니다. 이제 클라이언트가 request.status를 구문 분석하고 401을 볼 수 있지만 리디렉션을 처리하지 못합니다.다트 클라이언트 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");
}
자바 서버
//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