diff --git a/src/main/java/org/esupportail/smsu/domain/beans/User.java b/src/main/java/org/esupportail/smsu/domain/beans/User.java index 021df80d..54f00fd2 100644 --- a/src/main/java/org/esupportail/smsu/domain/beans/User.java +++ b/src/main/java/org/esupportail/smsu/domain/beans/User.java @@ -36,6 +36,8 @@ public class User implements Serializable { public Set rights; + public String sessionId; + /** * Bean constructor. */ diff --git a/src/main/java/org/esupportail/smsu/web/controllers/LoginController.java b/src/main/java/org/esupportail/smsu/web/controllers/LoginController.java index 7ab2377e..14bc8394 100644 --- a/src/main/java/org/esupportail/smsu/web/controllers/LoginController.java +++ b/src/main/java/org/esupportail/smsu/web/controllers/LoginController.java @@ -34,6 +34,7 @@ public Response get(@Context HttpServletRequest request) throws IOException { } User user = domainService.getUser(request.getRemoteUser()); + user.sessionId = request.getSession().getId(); String jsUser = new ObjectMapper().writeValueAsString(user); String content, type; if (request.getParameter("postMessage") != null) { diff --git a/src/main/resources/properties/auth/auth.xml b/src/main/resources/properties/auth/auth.xml index 4a120722..2cccfa6e 100644 --- a/src/main/resources/properties/auth/auth.xml +++ b/src/main/resources/properties/auth/auth.xml @@ -16,7 +16,7 @@ - + diff --git a/src/main/webapp/js/helpers.js b/src/main/webapp/js/helpers.js index 262e4c5c..44927c32 100644 --- a/src/main/webapp/js/helpers.js +++ b/src/main/webapp/js/helpers.js @@ -214,6 +214,8 @@ function tryRelog() { this.setLoggedUser = function (loggedUser) { console.log('user logged in: ' + loggedUser.id); + $rootScope.sessionId = loggedUser.sessionId; + delete loggedUser.sessionId; $rootScope.loggedUser = h.userWithCapabilities(loggedUser); }; @@ -233,10 +235,21 @@ function setHttpHeader(methods, name, val) { }); } +var cookiesRejected = false; function xhrRequest(args, flags) { var onError401 = function (resp) { + if (flags.justSuccessfullyLogged) { + if (!flags.cookiesRejected) { + console.log("It looks like our cookies are rejected. Trying to pass sessionId in URLs..."); + cookiesRejected = true; + return xhrRequest(args, flags); + } else { + alert("FATAL : both cookies and URL parameter jsessionid are rejected"); + return $q.reject(resp); + } + } return tryRelog().then(function () { - return xhrRequest(args); + return xhrRequest(args, { justSuccessfullyLogged: true }); }); }; var onErrorCsrf = function (resp, err) { @@ -272,6 +285,11 @@ function xhrRequest(args, flags) { alert("unknown error " + status); return $q.reject(resp); }; + if (cookiesRejected && !flags.cookiesRejected) { + flags.cookiesRejected = true; + args = angular.copy(args); + args.url = args.url + ";jsessionid=" + $rootScope.sessionId; + } return $http(args).then(function (resp) { return resp; }, onError);