From commits-return-12060-archive-asf-public=cust-asf.ponee.io@syncope.apache.org Wed Sep 19 12:22:00 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id C8D1E180621 for ; Wed, 19 Sep 2018 12:21:59 +0200 (CEST) Received: (qmail 11520 invoked by uid 500); 19 Sep 2018 10:21:58 -0000 Mailing-List: contact commits-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list commits@syncope.apache.org Received: (qmail 11511 invoked by uid 99); 19 Sep 2018 10:21:58 -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; Wed, 19 Sep 2018 10:21:58 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id CB1BEE0057; Wed, 19 Sep 2018 10:21:58 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: ilgrosso@apache.org To: commits@syncope.apache.org Date: Wed, 19 Sep 2018 10:21:58 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] syncope git commit: Workaround for WICKET-6588 Repository: syncope Updated Branches: refs/heads/2_1_X 5bdfc7d63 -> 4c324a80f refs/heads/master aebb4460f -> d5b371fa1 Workaround for WICKET-6588 Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4c324a80 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4c324a80 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4c324a80 Branch: refs/heads/2_1_X Commit: 4c324a80f9c1bbdfdce7a8b68e0663c94907ea5e Parents: 5bdfc7d Author: Francesco Chicchiriccò Authored: Wed Sep 19 12:21:33 2018 +0200 Committer: Francesco Chicchiriccò Committed: Wed Sep 19 12:21:33 2018 +0200 ---------------------------------------------------------------------- .../topology/TopologyWebSocketBehavior.java | 40 ++++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/4c324a80/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java index 1134a00..7ad0f08 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyWebSocketBehavior.java @@ -27,17 +27,23 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import javax.servlet.SessionTrackingMode; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import org.apache.syncope.client.console.SyncopeConsoleSession; import org.apache.syncope.client.console.rest.ConnectorRestClient; import org.apache.syncope.client.console.rest.ResourceRestClient; import org.apache.syncope.common.lib.to.ConnInstanceTO; import org.apache.syncope.common.lib.to.ResourceTO; import org.apache.wicket.Application; +import org.apache.wicket.Component; import org.apache.wicket.Session; import org.apache.wicket.ThreadContext; +import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.ws.api.WebSocketBehavior; import org.apache.wicket.protocol.ws.api.WebSocketRequestHandler; import org.apache.wicket.protocol.ws.api.message.TextMessage; +import org.apache.wicket.util.cookies.CookieUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,20 +56,46 @@ public class TopologyWebSocketBehavior extends WebSocketBehavior { private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final Map resources = - Collections.synchronizedMap(new HashMap()); + Collections.synchronizedMap(new HashMap<>()); - private final Set runningResCheck = Collections.synchronizedSet(new HashSet()); + private final Set runningResCheck = Collections.synchronizedSet(new HashSet<>()); private final Map connectors = - Collections.synchronizedMap(new HashMap()); + Collections.synchronizedMap(new HashMap<>()); - private final Set runningConnCheck = Collections.synchronizedSet(new HashSet()); + private final Set runningConnCheck = Collections.synchronizedSet(new HashSet<>()); private final ConnectorRestClient connectorRestClient = new ConnectorRestClient(); private final ResourceRestClient resourceRestClient = new ResourceRestClient(); @Override + protected CharSequence getSessionId(final Component component) { + String sessionId = ""; + WebApplication application = (WebApplication) component.getApplication(); + Set effectiveSessionTrackingModes = + application.getServletContext().getEffectiveSessionTrackingModes(); + Object containerRequest = component.getRequest().getContainerRequest(); + if (effectiveSessionTrackingModes.size() == 1 + && SessionTrackingMode.URL.equals(effectiveSessionTrackingModes.iterator().next())) { + + sessionId = component.getSession().getId(); + } else if (containerRequest instanceof HttpServletRequest) { + CookieUtils cookieUtils = new CookieUtils(); + String jsessionCookieName = application.getServletContext().getSessionCookieConfig().getName(); + if (jsessionCookieName == null) { + jsessionCookieName = "JSESSIONID"; + } + Cookie jsessionid = cookieUtils.getCookie(jsessionCookieName); + HttpServletRequest httpServletRequest = (HttpServletRequest) containerRequest; + if (jsessionid == null || httpServletRequest.isRequestedSessionIdValid() == false) { + sessionId = component.getSession().getId(); + } + } + return sessionId; + } + + @Override protected void onMessage(final WebSocketRequestHandler handler, final TextMessage message) { try { JsonNode obj = OBJECT_MAPPER.readTree(message.getText());