@ -18,6 +18,7 @@ package org.springframework.web.servlet.support;
@@ -18,6 +18,7 @@ package org.springframework.web.servlet.support;
import static org.junit.Assert.* ;
import java.net.URLEncoder ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.List ;
@ -31,7 +32,6 @@ import org.junit.Test;
@@ -31,7 +32,6 @@ import org.junit.Test;
import org.springframework.mock.web.test.MockHttpServletRequest ;
import org.springframework.mock.web.test.MockHttpServletResponse ;
import org.springframework.util.MultiValueMap ;
import org.springframework.web.servlet.FlashMap ;
import org.springframework.web.util.WebUtils ;
@ -113,19 +113,19 @@ public class FlashMapManagerTests {
@@ -113,19 +113,19 @@ public class FlashMapManagerTests {
this . flashMapManager . setFlashMaps ( Arrays . asList ( flashMap ) ) ;
this . request . setParameter ( "number" , ( String ) null ) ;
this . request . setQueryString ( "number= " ) ;
FlashMap inputFlashMap = this . flashMapManager . retrieveAndUpdate ( this . request , this . response ) ;
assertNull ( inputFlashMap ) ;
assertEquals ( "FlashMap should not have been removed" , 1 , this . flashMapManager . getFlashMaps ( ) . size ( ) ) ;
this . request . setParameter ( "number" , " two" ) ;
this . request . setQueryString ( "number= two" ) ;
inputFlashMap = this . flashMapManager . retrieveAndUpdate ( this . request , this . response ) ;
assertNull ( inputFlashMap ) ;
assertEquals ( "FlashMap should not have been removed" , 1 , this . flashMapManager . getFlashMaps ( ) . size ( ) ) ;
this . request . setParameter ( "number" , " one" ) ;
this . request . setQueryString ( "number= one" ) ;
inputFlashMap = this . flashMapManager . retrieveAndUpdate ( this . request , this . response ) ;
assertEquals ( flashMap , inputFlashMap ) ;
@ -143,13 +143,13 @@ public class FlashMapManagerTests {
@@ -143,13 +143,13 @@ public class FlashMapManagerTests {
this . flashMapManager . setFlashMaps ( Arrays . asList ( flashMap ) ) ;
this . request . setParameter ( "id" , " 1" ) ;
this . request . setQueryString ( "id= 1" ) ;
FlashMap inputFlashMap = this . flashMapManager . retrieveAndUpdate ( this . request , this . response ) ;
assertNull ( inputFlashMap ) ;
assertEquals ( "FlashMap should not have been removed" , 1 , this . flashMapManager . getFlashMaps ( ) . size ( ) ) ;
this . request . addParameter ( "id" , " 2") ;
this . request . setQueryString ( "id=1&id= 2") ;
inputFlashMap = this . flashMapManager . retrieveAndUpdate ( this . request , this . response ) ;
assertEquals ( flashMap , inputFlashMap ) ;
@ -268,20 +268,54 @@ public class FlashMapManagerTests {
@@ -268,20 +268,54 @@ public class FlashMapManagerTests {
@Test
public void saveOutputFlashMapDecodeParameters ( ) throws Exception {
FlashMap flashMap = new FlashMap ( ) ;
flashMap . put ( "key" , "value" ) ;
flashMap . setTargetRequestPath ( "/path" ) ;
flashMap . addTargetRequestParam ( "param" , "%D0%90%D0%90" ) ;
flashMap . addTargetRequestParam ( "param" , "%D0%91%D0%91" ) ;
flashMap . addTargetRequestParam ( "param" , "%D0%92%D0%92" ) ;
flashMap . addTargetRequestParam ( "%3A%2F%3F%23%5B%5D%40" , "value" ) ;
this . request . setCharacterEncoding ( "UTF-8" ) ;
this . flashMapManager . saveOutputFlashMap ( flashMap , this . request , this . response ) ;
MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest ( "GET" , "/path" ) ;
requestAfterRedirect . setQueryString ( "param=%D0%90%D0%90¶m=%D0%91%D0%91¶m=%D0%92%D0%92&%3A%2F%3F%23%5B%5D%40=value" ) ;
requestAfterRedirect . addParameter ( "param" , "\u0410\u0410" ) ;
requestAfterRedirect . addParameter ( "param" , "\u0411\u0411" ) ;
requestAfterRedirect . addParameter ( "param" , "\u0412\u0412" ) ;
requestAfterRedirect . addParameter ( ":/?#[]@" , "value" ) ;
flashMap = this . flashMapManager . retrieveAndUpdate ( requestAfterRedirect , new MockHttpServletResponse ( ) ) ;
assertNotNull ( flashMap ) ;
assertEquals ( 1 , flashMap . size ( ) ) ;
assertEquals ( "value" , flashMap . get ( "key" ) ) ;
}
// SPR-12569
@Test
public void flashAttributesWithQueryParamsWithSpace ( ) throws Exception {
String encodedValue = URLEncoder . encode ( "1 2" , "UTF-8" ) ;
FlashMap flashMap = new FlashMap ( ) ;
flashMap . put ( "anyKey" , "anyValue" ) ;
flashMap . put ( "key" , "value" ) ;
flashMap . setTargetRequestPath ( "/path" ) ;
flashMap . addTargetRequestParam ( "param" , encodedValue ) ;
flashMap . addTargetRequestParam ( "key" , "%D0%90%D0%90" ) ;
flashMap . addTargetRequestParam ( "key" , "%D0%91%D0%91" ) ;
flashMap . addTargetRequestParam ( "key" , "%D0%92%D0%92" ) ;
flashMap . addTargetRequestParam ( "%3A%2F%3F%23%5B%5D%40" , "value" ) ;
this . request . setCharacterEncoding ( "UTF-8" ) ;
this . flashMapManager . saveOutputFlashMap ( flashMap , this . request , this . response ) ;
MultiValueMap < String , String > targetRequestParams = flashMap . getTargetRequestParams ( ) ;
assertEquals ( Arrays . asList ( "\u0410\u0410" , "\u0411\u0411" , "\u0412\u0412" ) , targetRequestParams . get ( "key" ) ) ;
assertEquals ( Arrays . asList ( "value" ) , targetRequestParams . get ( ":/?#[]@" ) ) ;
MockHttpServletRequest requestAfterRedirect = new MockHttpServletRequest ( "GET" , "/path" ) ;
requestAfterRedirect . setQueryString ( "param=" + encodedValue ) ;
requestAfterRedirect . addParameter ( "param" , "1 2" ) ;
flashMap = this . flashMapManager . retrieveAndUpdate ( requestAfterRedirect , new MockHttpServletResponse ( ) ) ;
assertNotNull ( flashMap ) ;
assertEquals ( 1 , flashMap . size ( ) ) ;
assertEquals ( "value" , flashMap . get ( "key" ) ) ;
}