다른 JS 라이브러리 (AngularJS, OpenLayers, ...)를 사용하여 웹 앱을 구축 중이며 로깅 된 사용자 세션이 만료 된 경우 (응답이 401 Unauthorized
상태로 돌아옴) 그를 리디렉션 할 수 있도록 모든 AJAX 응답을 가로 챌 수있는 방법이 필요합니다. 로그인 페이지로 이동합니다.
AngularJS가 interceptors
이러한 시나리오를 관리 할 수 있다는 것을 알고 있지만 OpenLayers 요청에 이러한 주입을 달성하는 방법을 찾을 수 없었습니다. 그래서 저는 바닐라 JS 접근 방식을 선택했습니다.
여기서이 코드를 찾았습니다.
(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
this.addEventListener("readystatechange", function() {
console.log(this.readyState); // this one I changed
}, false);
open.call(this, method, url, async, user, pass);
};
})(XMLHttpRequest.prototype.open);
... 내가 적응했고 예상대로 작동하는 것처럼 보입니다 (마지막 Google 크롬에서만 테스트했습니다).
XMLHTTPRequest의 프로토 타입을 수정할 때 이것이 얼마나 위험한지 또는 심각한 성능 문제를 일으킬 수 있는지 궁금합니다. 그런데 유효한 대안이 있습니까?
업데이트 : 요청이 전송되기 전에 가로채는 방법
이전 트릭은 정상적으로 작동합니다. 그러나 동일한 시나리오에서 요청이 전송되기 전에 일부 헤더를 삽입하려면 어떻게해야합니까? 다음을 수행하십시오.
(function(send) {
XMLHttpRequest.prototype.send = function(data) {
// in this case I'm injecting an access token (eg. accessToken) in the request headers before it gets sent
if(accessToken) this.setRequestHeader('x-access-token', accessToken);
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);