From 32b91b4ad28c771962cd27c5f9fc3941cdb93b5a Mon Sep 17 00:00:00 2001 From: Jan Bartel Date: Mon, 15 Aug 2022 18:00:13 +1000 Subject: [PATCH] Issue #8460 check DefaultSessionIdManager is started --- .../src/main/java/com/acme/SessionDump.java | 3 +++ .../jetty/proxy/BalancerServletTest.java | 1 - .../main/config/etc/sessions/id-manager.xml | 2 -- .../session/DefaultSessionIdManager.java | 22 ++++++++++++++++++- .../jetty/server/session/SessionHandler.java | 1 - 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/demos/demo-jetty-webapp/src/main/java/com/acme/SessionDump.java b/demos/demo-jetty-webapp/src/main/java/com/acme/SessionDump.java index 189a037862e8..90a4756e6ecb 100644 --- a/demos/demo-jetty-webapp/src/main/java/com/acme/SessionDump.java +++ b/demos/demo-jetty-webapp/src/main/java/com/acme/SessionDump.java @@ -17,6 +17,7 @@ import java.io.PrintWriter; import java.util.Date; import java.util.Enumeration; +import java.util.UUID; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -75,6 +76,8 @@ protected void handleForm(HttpServletRequest request) session.setAttribute("test", "value"); session.setAttribute("obj", new ObjectAttributeValue(System.currentTimeMillis())); session.setAttribute("WEBCL", new MultiMap<>()); + UUID uuid = UUID.randomUUID(); + session.setAttribute("uuid", uuid); } else if (session != null) { diff --git a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/BalancerServletTest.java b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/BalancerServletTest.java index 862f02bab1fb..ca59a9b877c1 100644 --- a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/BalancerServletTest.java +++ b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/BalancerServletTest.java @@ -100,7 +100,6 @@ private Server createServer(ServletHolder servletHolder, String nodeName) { DefaultSessionIdManager sessionIdManager = new DefaultSessionIdManager(server); sessionIdManager.setWorkerName(nodeName); - server.setSessionIdManager(sessionIdManager); } return server; diff --git a/jetty-server/src/main/config/etc/sessions/id-manager.xml b/jetty-server/src/main/config/etc/sessions/id-manager.xml index edb6c7219bdf..546f2682a48b 100644 --- a/jetty-server/src/main/config/etc/sessions/id-manager.xml +++ b/jetty-server/src/main/config/etc/sessions/id-manager.xml @@ -5,7 +5,6 @@ - @@ -32,5 +31,4 @@ - diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java index ce378e302aaf..3f2c6b949be4 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java @@ -68,6 +68,7 @@ public class DefaultSessionIdManager extends ContainerLifeCycle implements Sessi public DefaultSessionIdManager(Server server) { _server = server; + _server.setSessionIdManager(this); } /** @@ -86,6 +87,7 @@ public DefaultSessionIdManager(Server server, Random random) public void setServer(Server server) { _server = server; + _server.setSessionIdManager(this); } /** @@ -193,6 +195,9 @@ public void setReseed(long reseed) @Override public String newSessionId(HttpServletRequest request, long created) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + if (request == null) return newSessionId(created); @@ -223,6 +228,9 @@ public String newSessionId(HttpServletRequest request, long created) */ public String newSessionId(long seedTerm) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + // pick a new unique ID! String id = null; @@ -270,10 +278,13 @@ public String newSessionId(long seedTerm) } return id; } - + @Override public boolean isIdInUse(String id) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + if (id == null) return false; @@ -379,6 +390,9 @@ public void initRandom() @Override public String getExtendedId(String clusterId, HttpServletRequest request) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + if (!StringUtil.isBlank(_workerName)) { if (_workerAttr == null) @@ -413,6 +427,9 @@ public String getId(String extendedId) @Override public void expireAll(String id) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + if (LOG.isDebugEnabled()) LOG.debug("Expiring {}", id); @@ -440,6 +457,9 @@ public void invalidateAll(String id) @Override public String renewSessionId(String oldClusterId, String oldNodeId, HttpServletRequest request) { + if (!isStarted()) + throw new IllegalStateException("DefaultSessionIdManager not started"); + //generate a new id String newClusterId = newSessionId(request.hashCode()); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java index f1953cb5fbf2..d6fdeae4679f 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java @@ -426,7 +426,6 @@ protected void doStart() throws Exception { Thread.currentThread().setContextClassLoader(serverLoader); _sessionIdManager = new DefaultSessionIdManager(server); - server.setSessionIdManager(_sessionIdManager); server.manage(_sessionIdManager); _sessionIdManager.start(); }