diff options
Diffstat (limited to 'jetty-webapp/src/main/java')
-rw-r--r-- | jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java index 20df5165ca..71d7fb5401 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/StandardDescriptorProcessor.java @@ -653,16 +653,43 @@ public class StandardDescriptorProcessor extends IterativeDescriptorProcessor // <tracking-mode> // this is additive across web-fragments Iterator iter = node.iterator("tracking-mode"); - Set<SessionTrackingMode> modes = new HashSet<SessionTrackingMode>(); - modes.addAll(context.getSessionHandler().getSessionManager().getEffectiveSessionTrackingModes()); - while (iter.hasNext()) - { - XmlParser.Node mNode = (XmlParser.Node) iter.next(); - String trackMode = mNode.toString(false, true); - modes.add(SessionTrackingMode.valueOf(trackMode)); + if (iter.hasNext()) + { + Set<SessionTrackingMode> modes = null; + Origin o = context.getMetaData().getOrigin("session.tracking-mode"); + switch (o) + { + case NotSet://not previously set, starting fresh + case WebDefaults://previously set in web defaults, allow this descriptor to start fresh + { + + modes = new HashSet<SessionTrackingMode>(); + context.getMetaData().setOrigin("session.tracking-mode", descriptor); + break; + } + case WebXml: + case WebFragment: + case WebOverride: + { + //if setting from an override descriptor, start afresh, otherwise add-in tracking-modes + if (descriptor instanceof OverrideDescriptor) + modes = new HashSet<SessionTrackingMode>(); + else + modes = new HashSet<SessionTrackingMode>(context.getSessionHandler().getSessionManager().getEffectiveSessionTrackingModes()); + context.getMetaData().setOrigin("session.tracking-mode", descriptor); + break; + } + } + + while (iter.hasNext()) + { + XmlParser.Node mNode = (XmlParser.Node) iter.next(); + String trackMode = mNode.toString(false, true); + modes.add(SessionTrackingMode.valueOf(trackMode)); + } + context.getSessionHandler().getSessionManager().setSessionTrackingModes(modes); } - context.getSessionHandler().getSessionManager().setSessionTrackingModes(modes); - + //Servlet Spec 3.0 //<cookie-config> |