From 4e0e5b6da2a2a7630026b59eb3867f31a4c42dec Mon Sep 17 00:00:00 2001 From: serge-rider Date: Fri, 2 Jan 2026 06:23:03 +0100 Subject: [PATCH 1/2] dbeaver/pro#7923 CB events handle: session search fix, logging fix --- ...WSObjectPermissionUpdatedEventHandler.java | 18 ++++------------- .../service/session/CBSessionManager.java | 2 ++ .../server/WebAppSessionManager.java | 2 ++ .../server/events/WSDefaultEventHandler.java | 20 +++++++------------ 4 files changed, 15 insertions(+), 27 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java index 9b367adbb8e..75038cc8528 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java @@ -33,7 +33,6 @@ import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceProperty; import org.jkiss.dbeaver.model.websocket.event.permissions.WSObjectPermissionEvent; -import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -61,22 +60,13 @@ public void handleEvent(@NotNull WSObjectPermissionEvent event) { yield null; } }; - if (runnable == null) { + if (runnable == null || event.getSessionId() == null) { return; } - log.debug(event.getTopicId() + " event handled"); - Collection allSessions = CBApplication.getInstance().getSessionManager().getAllActiveSessions(); - for (var activeUserSession : allSessions) { - if (!isAcceptableInSession(activeUserSession, event)) { - log.debug("Cannot handle %s event '%s' in session %s".formatted( - event.getTopicId(), - event.getId(), - activeUserSession.getSessionId() - )); - continue; - } + BaseWebSession webSession = WebAppUtils.getWebApplication().getSessionManager().getSession(event.getSessionId()); + if (webSession != null) { log.debug("%s event '%s' handled".formatted(event.getTopicId(), event.getId())); - runnable.accept(activeUserSession); + runnable.accept(webSession); } } diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java index e23e4048d80..4d25bac0da6 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java @@ -294,6 +294,7 @@ public WebSession findWebSession(HttpServletRequest request) { } } + @Nullable @Override public WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { WebSession webSession = findWebSession(request); @@ -323,6 +324,7 @@ public void expireIdleSessions() { } } + @NotNull @Override public Collection getAllActiveSessions() { synchronized (sessionMap) { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java index 59ac88146a2..8baf29b5d51 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java @@ -55,8 +55,10 @@ WebSession getWebSession( @Nullable WebSession findWebSession(HttpServletRequest request); + @Nullable WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException; + @NotNull Collection getAllActiveSessions(); WebSession getOrRestoreWebSession(WebHttpRequestInfo httpRequest); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java index 10bea4a2ede..325696159ad 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java @@ -23,26 +23,20 @@ import org.jkiss.dbeaver.model.websocket.WSEventHandler; import org.jkiss.dbeaver.model.websocket.event.WSEvent; -import java.util.Collection; - public class WSDefaultEventHandler implements WSEventHandler { private static final Log log = Log.getLog(WSDefaultEventHandler.class); @Override public void handleEvent(@NotNull EVENT event) { - log.debug(event.getTopicId() + " event handled"); - Collection allSessions = WebAppUtils.getWebApplication() - .getSessionManager() - .getAllActiveSessions(); - for (var activeUserSession : allSessions) { - if (!isAcceptableInSession(activeUserSession, event)) { - log.debug("Cannot handle " + event.getTopicId() + " event '" + event.getId() + - "' in session " + activeUserSession.getSessionId()); - continue; + if (event.getSessionId() != null) { + BaseWebSession session = WebAppUtils.getWebApplication().getSessionManager().getSession(event.getSessionId()); + if (session != null) { + log.debug(event.getTopicId() + " event '" + event.getId() + "' handled in session '" + event.getSessionId() + "'"); + updateSessionData(session, event); + } else { + log.debug(event.getTopicId() + " event '" + event.getId() + "' not handled: session '" + event.getSessionId() + "' was not found."); } - log.debug(event.getTopicId() + " event '" + event.getId() + "' handled"); - updateSessionData(activeUserSession, event); } } From dd77f34be0c4563f5aa3287bcf33b02833fe008a Mon Sep 17 00:00:00 2001 From: serge-rider Date: Fri, 2 Jan 2026 06:50:59 +0100 Subject: [PATCH 2/2] dbeaver/pro#7923 CB events handle: use different function for SM Session ID check --- ...WSObjectPermissionUpdatedEventHandler.java | 2 +- .../service/session/CBSessionManager.java | 24 +++++++++++++++---- .../server/WebAppSessionManager.java | 7 ++++-- .../server/events/WSDefaultEventHandler.java | 2 +- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java index 75038cc8528..687760be69c 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/server/events/WSObjectPermissionUpdatedEventHandler.java @@ -63,7 +63,7 @@ public void handleEvent(@NotNull WSObjectPermissionEvent event) { if (runnable == null || event.getSessionId() == null) { return; } - BaseWebSession webSession = WebAppUtils.getWebApplication().getSessionManager().getSession(event.getSessionId()); + BaseWebSession webSession = WebAppUtils.getWebApplication().getSessionManager().findSessionBySmId(event.getSessionId()); if (webSession != null) { log.debug("%s event '%s' handled".formatted(event.getTopicId(), event.getId())); runnable.accept(webSession); diff --git a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java index 4d25bac0da6..b03f216af3f 100644 --- a/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java +++ b/server/bundles/io.cloudbeaver.server.ce/src/io/cloudbeaver/service/session/CBSessionManager.java @@ -283,7 +283,7 @@ public BaseWebSession getSession(@NotNull String sessionId) { @Override @Nullable - public WebSession findWebSession(HttpServletRequest request) { + public WebSession findWebSession(@NotNull HttpServletRequest request) { String sessionId = getSessionId(request); synchronized (sessionMap) { var session = sessionMap.get(sessionId); @@ -296,7 +296,20 @@ public WebSession findWebSession(HttpServletRequest request) { @Nullable @Override - public WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { + public BaseWebSession findSessionBySmId(@NotNull String smSessionId) { + synchronized (sessionMap) { + for (BaseWebSession session : sessionMap.values()) { + if (Objects.equals(session.getUserContext().getSmSessionId(), smSessionId)) { + return session; + } + } + } + return null; + } + + @Nullable + @Override + public WebSession findWebSession(@NotNull HttpServletRequest request, boolean errorOnNoFound) throws DBWebException { WebSession webSession = findWebSession(request); if (webSession != null) { return webSession; @@ -454,12 +467,13 @@ public void closeAllSessions(@Nullable String initiatorSessionId) { /** * Creates new web session or returns existing one. */ - public WebSession createWebSession(WebHttpRequestInfo requestInfo) throws DBException { + @NotNull + public WebSession createWebSession(@NotNull WebHttpRequestInfo requestInfo) throws DBException { String id = requestInfo.getId(); synchronized (sessionMap) { BaseWebSession baseWebSession = sessionMap.get(id); - if (baseWebSession instanceof WebSession) { - return (WebSession) baseWebSession; + if (baseWebSession instanceof WebSession webSession) { + return webSession; } else { WebSession webSessionImpl = createWebSessionImpl(requestInfo); sessionMap.put(id, webSessionImpl); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java index 8baf29b5d51..ca25a2a2a89 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/WebAppSessionManager.java @@ -53,10 +53,13 @@ WebSession getWebSession( BaseWebSession getSession(@NotNull String sessionId); @Nullable - WebSession findWebSession(HttpServletRequest request); + WebSession findWebSession(@NotNull HttpServletRequest request); @Nullable - WebSession findWebSession(HttpServletRequest request, boolean errorOnNoFound) throws DBWebException; + BaseWebSession findSessionBySmId(@NotNull String smSessionId); + + @Nullable + WebSession findWebSession(@NotNull HttpServletRequest request, boolean errorOnNoFound) throws DBWebException; @NotNull Collection getAllActiveSessions(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java index 325696159ad..c8f83592a98 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSDefaultEventHandler.java @@ -30,7 +30,7 @@ public class WSDefaultEventHandler implements WSEventHand @Override public void handleEvent(@NotNull EVENT event) { if (event.getSessionId() != null) { - BaseWebSession session = WebAppUtils.getWebApplication().getSessionManager().getSession(event.getSessionId()); + BaseWebSession session = WebAppUtils.getWebApplication().getSessionManager().findSessionBySmId(event.getSessionId()); if (session != null) { log.debug(event.getTopicId() + " event '" + event.getId() + "' handled in session '" + event.getSessionId() + "'"); updateSessionData(session, event);