Return-Path: X-Original-To: apmail-drill-commits-archive@www.apache.org Delivered-To: apmail-drill-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 205A3181D9 for ; Tue, 16 Feb 2016 21:10:51 +0000 (UTC) Received: (qmail 22661 invoked by uid 500); 16 Feb 2016 21:10:51 -0000 Delivered-To: apmail-drill-commits-archive@drill.apache.org Received: (qmail 22613 invoked by uid 500); 16 Feb 2016 21:10:51 -0000 Mailing-List: contact commits-help@drill.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: commits@drill.apache.org Delivered-To: mailing list commits@drill.apache.org Received: (qmail 22492 invoked by uid 99); 16 Feb 2016 21:10:51 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 16 Feb 2016 21:10:51 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CDE58E0A1B; Tue, 16 Feb 2016 21:10:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: json@apache.org To: commits@drill.apache.org Date: Tue, 16 Feb 2016 21:10:53 -0000 Message-Id: <6af4c43e2ea34d479f6cc97e8d8ab790@git.apache.org> In-Reply-To: <14cc1b94fdb6424783958e0cbe265d37@git.apache.org> References: <14cc1b94fdb6424783958e0cbe265d37@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [4/9] drill git commit: DRILL-4353: Add HttpSessionListener to release resources of expired/invalidated sessions DRILL-4353: Add HttpSessionListener to release resources of expired/invalidated sessions Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/ac79c590 Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/ac79c590 Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/ac79c590 Branch: refs/heads/drill-1.5.0-rc3 Commit: ac79c5904f484ac33ad99ece46c9303439b3d4d7 Parents: e8aa20d Author: vkorukanti Authored: Thu Feb 4 13:06:54 2016 -0800 Committer: Jason Altekruse Committed: Fri Feb 5 08:54:14 2016 -0800 ---------------------------------------------------------------------- .../drill/exec/server/rest/WebServer.java | 30 ++++++++++++++++++-- .../server/rest/auth/DrillUserPrincipal.java | 4 +-- 2 files changed, 30 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/ac79c590/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java index 358e847..6519169 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/WebServer.java @@ -44,6 +44,7 @@ import org.eclipse.jetty.security.ConstraintSecurityHandler; import org.eclipse.jetty.security.LoginService; import org.eclipse.jetty.security.SecurityHandler; import org.eclipse.jetty.security.authentication.FormAuthenticator; +import org.eclipse.jetty.security.authentication.SessionAuthentication; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.SecureRequestCustomizer; @@ -62,6 +63,9 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; import org.glassfish.jersey.servlet.ServletContainer; import org.joda.time.DateTime; +import javax.servlet.http.HttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; @@ -145,8 +149,8 @@ public class WebServer implements AutoCloseable { staticHolder.setInitParameter("pathInfoOnly", "true"); servletContextHandler.addServlet(staticHolder, "/static/*"); - servletContextHandler.setSessionHandler(createSessionHandler()); servletContextHandler.setSecurityHandler(createSecurityHandler()); + servletContextHandler.setSessionHandler(createSessionHandler(servletContextHandler.getSecurityHandler())); embeddedJetty.start(); } @@ -154,9 +158,31 @@ public class WebServer implements AutoCloseable { /** * @return A {@link SessionHandler} which contains a {@link HashSessionManager} */ - private SessionHandler createSessionHandler() { + private SessionHandler createSessionHandler(final SecurityHandler securityHandler) { SessionManager sessionManager = new HashSessionManager(); sessionManager.setMaxInactiveInterval(config.getInt(ExecConstants.HTTP_SESSION_MAX_IDLE_SECS)); + sessionManager.addEventListener(new HttpSessionListener() { + @Override + public void sessionCreated(HttpSessionEvent se) { + // No-op + } + + @Override + public void sessionDestroyed(HttpSessionEvent se) { + final HttpSession session = se.getSession(); + if (session == null) { + return; + } + + final Object authCreds = session.getAttribute(SessionAuthentication.__J_AUTHENTICATED); + if (authCreds != null) { + final SessionAuthentication sessionAuth = (SessionAuthentication) authCreds; + securityHandler.logout(sessionAuth); + session.removeAttribute(SessionAuthentication.__J_AUTHENTICATED); + } + } + }); + return new SessionHandler(sessionManager); } http://git-wip-us.apache.org/repos/asf/drill/blob/ac79c590/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/auth/DrillUserPrincipal.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/auth/DrillUserPrincipal.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/auth/DrillUserPrincipal.java index a7c3425..16e6f38 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/auth/DrillUserPrincipal.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/auth/DrillUserPrincipal.java @@ -19,7 +19,6 @@ package org.apache.drill.exec.server.rest.auth; import com.google.common.collect.ImmutableList; import org.apache.drill.exec.client.DrillClient; -import org.apache.drill.exec.proto.UserBitShared.QueryProfile; import org.eclipse.jetty.security.MappedLoginService.RolePrincipal; import java.security.Principal; @@ -46,7 +45,7 @@ public class DrillUserPrincipal implements Principal, AutoCloseable { private final String userName; private final boolean isAdmin; - private final DrillClient drillClient; + private DrillClient drillClient; public DrillUserPrincipal(final String userName, final boolean isAdmin, final DrillClient drillClient) { this.userName = userName; @@ -88,6 +87,7 @@ public class DrillUserPrincipal implements Principal, AutoCloseable { public void close() throws Exception { if (drillClient != null) { drillClient.close(); + drillClient = null; // Reset it to null to avoid closing multiple times. } } } \ No newline at end of file