From 986d5491f265233d21041da65757fda361854ec1 Mon Sep 17 00:00:00 2001 From: Prabhjyot Singh Date: Wed, 6 Jul 2016 18:55:37 +0530 Subject: [PATCH 1/2] Application does not logout user when authcBasic and running on a different host/port --- .../apache/zeppelin/rest/LoginRestApi.java | 10 ++--- .../components/navbar/navbar.controller.js | 40 ++++++++----------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java index 0b9c9a612ff..3a866a8a7c6 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java @@ -26,10 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.FormParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.Response; import java.util.HashMap; import java.util.HashSet; @@ -113,7 +110,7 @@ public Response postLogin(@FormParam("userName") String userName, return response.build(); } - @POST + @GET @Path("logout") @ZeppelinApi public Response logout() { @@ -126,8 +123,9 @@ public Response logout() { data.put("principal", "anonymous"); data.put("roles", ""); data.put("ticket", "anonymous"); + data.put("WWW-Authenticate", "Basic realm=\"Login required\""); - response = new JsonResponse(Response.Status.OK, "", data); + response = new JsonResponse(Response.Status.UNAUTHORIZED, "", data); LOG.warn(response.toString()); return response.build(); } diff --git a/zeppelin-web/src/components/navbar/navbar.controller.js b/zeppelin-web/src/components/navbar/navbar.controller.js index 702a2573508..cecb5f80a94 100644 --- a/zeppelin-web/src/components/navbar/navbar.controller.js +++ b/zeppelin-web/src/components/navbar/navbar.controller.js @@ -54,30 +54,22 @@ angular.module('zeppelinWebApp') $scope.logout = function() { var logoutURL = baseUrlSrv.getRestApiBase() + '/login/logout'; - var request = new XMLHttpRequest(); - - //force authcBasic (if configured) to logout by setting credentials as false:false - request.open('post', logoutURL, true, 'false', 'false'); - request.onreadystatechange = function() { - if (request.readyState === 4) { - if (request.status === 401 || request.status === 405 || request.status === 500) { - $rootScope.userName = ''; - $rootScope.ticket.principal = ''; - $rootScope.ticket.ticket = ''; - $rootScope.ticket.roles = ''; - BootstrapDialog.show({ - message: 'Logout Success' - }); - setTimeout(function() { - window.location.replace('/'); - }, 1000); - } else { - request.open('post', logoutURL, true, 'false', 'false'); - request.send(); - } - } - }; - request.send(); + + $http.get(logoutURL).error(function() { + //force authcBasic (if configured) to logout + $http.get(logoutURL).error(function() { + $rootScope.userName = ''; + $rootScope.ticket.principal = ''; + $rootScope.ticket.ticket = ''; + $rootScope.ticket.roles = ''; + BootstrapDialog.show({ + message: 'Logout Success' + }); + setTimeout(function() { + window.location.replace('/'); + }, 1000); + }); + }); }; $scope.search = function(searchTerm) { From 04a2aff65f687eb42f78af0d5ac71594c7a36863 Mon Sep 17 00:00:00 2001 From: Prabhjyot Singh Date: Fri, 8 Jul 2016 14:42:53 +0530 Subject: [PATCH 2/2] remove unrequired params from response, revert to post --- .../apache/zeppelin/rest/LoginRestApi.java | 20 +++++++------------ .../components/navbar/navbar.controller.js | 8 +++++--- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java index 3a866a8a7c6..0a239221ef2 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/rest/LoginRestApi.java @@ -17,7 +17,6 @@ package org.apache.zeppelin.rest; import org.apache.shiro.authc.*; -import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.apache.zeppelin.annotation.ZeppelinApi; import org.apache.zeppelin.server.JsonResponse; @@ -26,7 +25,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.*; +import javax.ws.rs.FormParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; import javax.ws.rs.core.Response; import java.util.HashMap; import java.util.HashSet; @@ -109,23 +111,15 @@ public Response postLogin(@FormParam("userName") String userName, LOG.warn(response.toString()); return response.build(); } - - @GET + + @POST @Path("logout") @ZeppelinApi public Response logout() { JsonResponse response; - Subject currentUser = org.apache.shiro.SecurityUtils.getSubject(); currentUser.logout(); - - Map data = new HashMap<>(); - data.put("principal", "anonymous"); - data.put("roles", ""); - data.put("ticket", "anonymous"); - data.put("WWW-Authenticate", "Basic realm=\"Login required\""); - - response = new JsonResponse(Response.Status.UNAUTHORIZED, "", data); + response = new JsonResponse(Response.Status.UNAUTHORIZED, "", ""); LOG.warn(response.toString()); return response.build(); } diff --git a/zeppelin-web/src/components/navbar/navbar.controller.js b/zeppelin-web/src/components/navbar/navbar.controller.js index cecb5f80a94..61aa1b85175 100644 --- a/zeppelin-web/src/components/navbar/navbar.controller.js +++ b/zeppelin-web/src/components/navbar/navbar.controller.js @@ -55,9 +55,11 @@ angular.module('zeppelinWebApp') $scope.logout = function() { var logoutURL = baseUrlSrv.getRestApiBase() + '/login/logout'; - $http.get(logoutURL).error(function() { + //for firefox and safari + logoutURL = logoutURL.replace('//', '//false:false@'); + $http.post(logoutURL).error(function() { //force authcBasic (if configured) to logout - $http.get(logoutURL).error(function() { + $http.post(logoutURL).error(function() { $rootScope.userName = ''; $rootScope.ticket.principal = ''; $rootScope.ticket.ticket = ''; @@ -69,7 +71,7 @@ angular.module('zeppelinWebApp') window.location.replace('/'); }, 1000); }); - }); + }); }; $scope.search = function(searchTerm) {