From 21966990c89a51fbcc36a778682b021d983aabd8 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 30 Jan 2012 18:39:20 -0500 Subject: [PATCH] SPR-9016 Add flag to Redirectview to disable expanding URI vars --- build-spring-framework/resources/changelog.txt | 1 + .../web/servlet/view/RedirectView.java | 15 ++++++++++++++- .../view/RedirectViewUriTemplateTests.java | 12 ++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/build-spring-framework/resources/changelog.txt b/build-spring-framework/resources/changelog.txt index eff2824e93..ce2299703b 100644 --- a/build-spring-framework/resources/changelog.txt +++ b/build-spring-framework/resources/changelog.txt @@ -27,6 +27,7 @@ Changes in version 3.1.1 (2012-02-06) * allow adding flash attributes in methods with a ModelAndView return value * preserve quotes in MediaType parameters * make flash attributes available in the model of ParameterizableViewController and UrlFilenameViewController +* add property to RedirectView to disable expanding URI variables in redirect URL Changes in version 3.1 GA (2011-12-12) -------------------------------------- diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java index 184c9a3284..0e100ee7f3 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/RedirectView.java @@ -106,6 +106,7 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { private HttpStatus statusCode; + private boolean expandUriTemplateVariables = true; /** * Constructor for use as a bean. @@ -225,6 +226,18 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { this.statusCode = statusCode; } + /** + * Whether to treat the redirect URL as a URI template. + * Set this flag to false if the redirect URL contains open + * and close curly braces "{", "}" and you don't want them interpreted + * as URI variables. + *

Defaults to true. + * @param expandUriTemplateVariables + */ + public void setExpandUriTemplateVariables(boolean expandUriTemplateVariables) { + this.expandUriTemplateVariables = expandUriTemplateVariables; + } + /** * Returns "true" indicating this view performs a redirect. */ @@ -288,7 +301,7 @@ public class RedirectView extends AbstractUrlBasedView implements SmartView { enc = WebUtils.DEFAULT_CHARACTER_ENCODING; } - if (StringUtils.hasText(targetUrl)) { + if (this.expandUriTemplateVariables && StringUtils.hasText(targetUrl)) { Map variables = getCurrentRequestUriVariables(request); targetUrl = replaceUriTemplateVariables(targetUrl.toString(), model, variables, enc); } diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewUriTemplateTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewUriTemplateTests.java index b1e01024b2..87b5d5a3b8 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewUriTemplateTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/RedirectViewUriTemplateTests.java @@ -121,5 +121,17 @@ public class RedirectViewUriTemplateTests { assertEquals("", this.response.getRedirectedUrl()); } + + // SPR-9016 + + @Test + public void dontApplyUriVariables() throws Exception { + String url = "/test#{'one','abc'}"; + RedirectView redirectView = new RedirectView(url, true); + redirectView.setExpandUriTemplateVariables(false); + redirectView.renderMergedOutputModel(new ModelMap(), this.request, this.response); + + assertEquals(url, this.response.getRedirectedUrl()); + } }