dbeaver/pro#4117 Fix session management (#3248)

* dbeaver/pro#4117 Fix session management

* dbeaver/pro#4117 Fix comments

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
This commit is contained in:
Ivan Gagarkin
2025-02-10 18:25:22 +01:00
committed by GitHub
co-authored by Ivan Gagarkin MashaKorax
parent 0048ad88e4
commit 60e41367f6
@@ -61,11 +61,10 @@ public class CBSessionManager implements WebAppSessionManager {
@Override
public BaseWebSession closeSession(@NotNull HttpServletRequest request) {
HttpSession session = request.getSession();
if (session == null) {
return null;
if (session != null) {
return closeSession(session.getId());
}
return closeSession(session.getId());
return null;
}
@Override
@@ -74,13 +73,12 @@ public class CBSessionManager implements WebAppSessionManager {
synchronized (sessionMap) {
webSession = sessionMap.remove(sessionId);
}
if (webSession == null) {
return null;
if (webSession != null) {
log.debug("> Close session '" + sessionId + "'");
webSession.close();
return webSession;
}
log.debug("> Close session '" + sessionId + "'");
webSession.close();
return webSession;
return null;
}
protected CBApplication getApplication() {
@@ -122,14 +120,14 @@ public class CBSessionManager implements WebAppSessionManager {
var baseWebSession = sessionMap.get(sessionId);
if (baseWebSession == null && CBApplication.getInstance().isConfigurationMode()) {
try {
webSession = createWebSession(new WebHttpRequestInfo(request));
webSession = createWebSessionImpl(new WebHttpRequestInfo(request));
} catch (DBException e) {
throw new DBWebException("Failed to create web session", e);
}
sessionMap.put(sessionId, webSession);
} else if (baseWebSession == null) {
try {
webSession = createWebSession(new WebHttpRequestInfo(request));
webSession = createWebSessionImpl(new WebHttpRequestInfo(request));
} catch (DBException e) {
throw new DBWebException("Failed to create web session", e);
}
@@ -190,7 +188,7 @@ public class CBSessionManager implements WebAppSessionManager {
return null;
}
webSession = createWebSession(requestInfo);
webSession = createWebSessionImpl(requestInfo);
restorePreviousUserSession(webSession, oldAuthInfo);
sessionMap.put(sessionId, webSession);
@@ -224,7 +222,7 @@ public class CBSessionManager implements WebAppSessionManager {
}
@NotNull
public WebSession createWebSession(@NotNull WebHttpRequestInfo request) throws DBException {
protected WebSession createWebSessionImpl(@NotNull WebHttpRequestInfo request) throws DBException {
return new WebSession(request, application, getSessionHandlers());
}
@@ -414,4 +412,21 @@ public class CBSessionManager implements WebAppSessionManager {
}
}
}
/**
* Creates new web session or returns existing one.
*/
public WebSession createWebSession(WebHttpRequestInfo requestInfo) throws DBException {
String id = requestInfo.getId();
synchronized (sessionMap) {
BaseWebSession baseWebSession = sessionMap.get(id);
if (baseWebSession instanceof WebSession) {
return (WebSession) baseWebSession;
} else {
WebSession webSessionImpl = createWebSessionImpl(requestInfo);
sessionMap.put(id, webSessionImpl);
return webSessionImpl;
}
}
}
}