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);
   });
 
 };