diff --git a/frontend-js/src/main/js/NetworkError.js b/frontend-js/src/main/js/NetworkError.js index 438539ed6b3d413974771d720701453807f1cd02..109b0ff5e62cf286e464960b45957e0240b41032 100644 --- a/frontend-js/src/main/js/NetworkError.js +++ b/frontend-js/src/main/js/NetworkError.js @@ -2,6 +2,7 @@ /* exported logger */ +// noinspection JSUnusedLocalSymbols var logger = require('./logger'); function NetworkError(message, connectionParams) { @@ -13,6 +14,9 @@ function NetworkError(message, connectionParams) { this.statusCode = connectionParams.statusCode; this.url = connectionParams.url; this.content = connectionParams.content; + if (this.content === undefined) { + this.content = ""; + } } NetworkError.prototype = Object.create(Error.prototype); diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index e7e6662fe691bcafb3d9185ecf2c88b04af1147f..4b020e2468714bdb0c93d4d991d7c40d45e66f37 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -158,6 +158,18 @@ ServerConnector.sendRequest = function (params) { }); }).then(function () { return content; + }, function (error) { + if (error instanceof NetworkError) { + if (error.statusCode === HttpStatus.FORBIDDEN && error.content.indexOf('"reason":"Invalid token"') >= 0) { + self.getSessionData().setToken(undefined); + if (self.getSessionData().getLogin() === "anonymous") { + window.location.reload(false); + } else { + window.location.href = ServerConnector.getServerBaseUrl() + "login.xhtml?from=" + encodeURI(window.location.href); + } + } + } + return Promise.reject(error); }); };