Updated Branches: refs/heads/wicket-1.5.x 80dc5dcef -> 532920dfa
WICKET-4312 Do not strip the jsessionid from the url for resources Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/532920df Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/532920df Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/532920df Branch: refs/heads/wicket-1.5.x Commit: 532920dfad88f9040b071492d9fca9b72fe34f58 Parents: 80dc5dc Author: martin-g <[email protected]> Authored: Thu Dec 22 13:15:30 2011 +0200 Committer: martin-g <[email protected]> Committed: Thu Dec 22 13:15:30 2011 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/ajax/wicket-ajax.js | 46 +++++++++++++- .../markup/html/internal/HeaderResponse.java | 4 +- .../markup/html/internal/HeaderResponseTest.java | 16 +++++ 3 files changed, 60 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js b/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js index 8301a17..8d412ec 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js +++ b/wicket-core/src/main/java/org/apache/wicket/ajax/wicket-ajax.js @@ -1801,7 +1801,7 @@ Wicket.Head.addElement = function(element) { // is an element in head that is of same type as myElement, and whose src // attribute is same as myElement.src. Wicket.Head.containsElement = function(element, mandatoryAttribute) { - var attr = element.getAttribute(mandatoryAttribute); + var attr = Wicket.Head.stripJSessionId(element.getAttribute(mandatoryAttribute)); if (attr == null || attr == "" || typeof(attr) == "undefined") return false; @@ -1819,9 +1819,9 @@ Wicket.Head.containsElement = function(element, mandatoryAttribute) { // we also have to check for attribute name that is suffixed by "_". // this is necessary for filtering script references if (node.tagName.toLowerCase() == element.tagName.toLowerCase()) { - - var loadedUrl = node.getAttribute(mandatoryAttribute); - var loadedUrl_ = node.getAttribute(mandatoryAttribute+"_"); + + var loadedUrl = Wicket.Head.stripJSessionId(node.getAttribute(mandatoryAttribute)); + var loadedUrl_ = Wicket.Head.stripJSessionId(node.getAttribute(mandatoryAttribute+"_")); if (loadedUrl == attr || loadedUrl_ == attr) { return true; } @@ -1830,6 +1830,44 @@ Wicket.Head.containsElement = function(element, mandatoryAttribute) { return false; } +/** + * Removes the optional ';jsessionid=...' from the passed url + * + * @param {String} url the url to strip the jsessionid from + * @return {String} the url without the jsessionid and its value + */ + // WICKET-3596 +Wicket.Head.stripJSessionId = function(url) { + if (url == null) + { + return null; + } + + // http://.../abc;jsessionid=...?param=... + var ixSemiColon = url.indexOf(";"); + if (ixSemiColon == -1) + { + return url; + } + + var ixQuestionMark = url.indexOf("?"); + if (ixQuestionMark == -1) + { + // no query paramaters; cut off at ";" + // http://.../abc;jsession=... + return url.substring(0, ixSemiColon); + } + + if (ixQuestionMark <= ixSemiColon) + { + // ? is before ; - no jsessionid in the url + return url; + } + + return url.substring(0, ixSemiColon) + url.substring(ixQuestionMark); +} + + // Adds a javascript element to page header. // The fakeSrc attribute is used to filter out duplicate javascript references. // External javascripts are loaded using xmlhttprequest. Then a javascript element is created and the http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java index 25e908a..1d4de09 100644 --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/internal/HeaderResponse.java @@ -145,7 +145,7 @@ public abstract class HeaderResponse implements IHeaderResponse getResponse().write("]>"); } getResponse().write("<link rel=\"stylesheet\" type=\"text/css\" href=\""); - getResponse().write(urlWoSessionId); + getResponse().write(url); getResponse().write("\""); if (media != null) { @@ -246,7 +246,7 @@ public abstract class HeaderResponse implements IHeaderResponse if (token1Unused && token2Unused) { - JavaScriptUtils.writeJavaScriptUrl(getResponse(), urlWoSessionId, id, defer, + JavaScriptUtils.writeJavaScriptUrl(getResponse(), url, id, defer, charset); markRendered(token1); if (token2 != null) http://git-wip-us.apache.org/repos/asf/wicket/blob/532920df/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java index 6736a8f..86299e2 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/HeaderResponseTest.java @@ -34,6 +34,7 @@ import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.resource.IResource; import org.apache.wicket.request.resource.ResourceReference; import org.apache.wicket.response.StringResponse; +import org.apache.wicket.util.tester.WicketTester; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -189,4 +190,19 @@ public class HeaderResponseTest Assert.assertEquals(expected, actual); } + /** + * https://issues.apache.org/jira/browse/WICKET-4312 + */ + @Test + public void preserveJSessionId() { + WicketTester tester = new WicketTester(); + try { + headerResponse.renderJavaScriptReference("js-resource.js;jsessionid=1h402r54r4xuep32znicouftm", "some-id", false, null); + String expected = "<script type=\"text/javascript\" id=\"some-id\" src=\"js-resource.js;jsessionid=1h402r54r4xuep32znicouftm\"></script>\n"; + String actual = headerResponse.getResponse().toString(); + Assert.assertEquals(expected, actual); + } finally { + tester.destroy(); + } + } }
