You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/09/19 10:21:59 UTC
[2/2] syncope git commit: Workaround for WICKET-6588
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/d5b371fa
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/d5b371fa
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/d5b371fa
Branch: refs/heads/master
Commit: d5b371fa13c3a70fdd408facb13e7eae1495eb46
Parents: aebb446
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Sep 19 12:21:33 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Sep 19 12:21:46 2018 +0200
----------------------------------------------------------------------
.../topology/TopologyWebSocketBehavior.java | 40 ++++++++++++++++++--
1 file changed, 36 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/d5b371fa/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<String, String> resources =
- Collections.<String, String>synchronizedMap(new HashMap<String, String>());
+ Collections.<String, String>synchronizedMap(new HashMap<>());
- private final Set<String> runningResCheck = Collections.synchronizedSet(new HashSet<String>());
+ private final Set<String> runningResCheck = Collections.synchronizedSet(new HashSet<>());
private final Map<String, String> connectors =
- Collections.<String, String>synchronizedMap(new HashMap<String, String>());
+ Collections.<String, String>synchronizedMap(new HashMap<>());
- private final Set<String> runningConnCheck = Collections.synchronizedSet(new HashSet<String>());
+ private final Set<String> 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<SessionTrackingMode> 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());