1
1
/*
2
- * Copyright 2002-2016 the original author or authors.
2
+ * Copyright 2002-2019 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
15
15
*/
16
16
package org .springframework .web .servlet .resource ;
17
17
18
- import java .util .Arrays ;
18
+ import java .io .IOException ;
19
+ import java .util .ArrayList ;
19
20
import java .util .Collections ;
20
21
import java .util .List ;
22
+ import javax .servlet .ServletException ;
21
23
import javax .servlet .http .HttpServletResponse ;
22
24
23
25
import org .junit .Before ;
27
29
import org .springframework .mock .web .test .MockHttpServletRequest ;
28
30
import org .springframework .mock .web .test .MockHttpServletResponse ;
29
31
30
- import static org .junit .Assert .assertEquals ;
32
+ import static org .junit .Assert .* ;
31
33
32
34
/**
33
35
* Unit tests for {@code ResourceUrlEncodingFilter}.
@@ -40,51 +42,54 @@ public class ResourceUrlEncodingFilterTests {
40
42
41
43
private ResourceUrlProvider urlProvider ;
42
44
45
+
43
46
@ Before
44
- public void createFilter () throws Exception {
47
+ public void createFilter () {
45
48
VersionResourceResolver versionResolver = new VersionResourceResolver ();
46
49
versionResolver .setStrategyMap (Collections .singletonMap ("/**" , new ContentVersionStrategy ()));
47
50
PathResourceResolver pathResolver = new PathResourceResolver ();
48
51
pathResolver .setAllowedLocations (new ClassPathResource ("test/" , getClass ()));
49
- List <ResourceResolver > resolvers = Arrays .asList (versionResolver , pathResolver );
52
+ List <ResourceResolver > resolvers = new ArrayList <>();
53
+ resolvers .add (versionResolver );
54
+ resolvers .add (pathResolver );
50
55
51
56
this .filter = new ResourceUrlEncodingFilter ();
52
57
this .urlProvider = createResourceUrlProvider (resolvers );
53
58
}
54
59
60
+ private ResourceUrlProvider createResourceUrlProvider (List <ResourceResolver > resolvers ) {
61
+ ResourceHttpRequestHandler handler = new ResourceHttpRequestHandler ();
62
+ handler .setLocations (Collections .singletonList (new ClassPathResource ("test/" , getClass ())));
63
+ handler .setResourceResolvers (resolvers );
64
+
65
+ ResourceUrlProvider urlProvider = new ResourceUrlProvider ();
66
+ urlProvider .setHandlerMap (Collections .singletonMap ("/resources/**" , handler ));
67
+ return urlProvider ;
68
+ }
69
+
70
+
55
71
@ Test
56
72
public void encodeURL () throws Exception {
57
- MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/" );
58
- MockHttpServletResponse response = new MockHttpServletResponse ();
59
-
60
- this .filter .doFilter (request , response , (req , res ) -> {
61
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
62
- String result = ((HttpServletResponse ) res ).encodeURL ("/resources/bar.css" );
63
- assertEquals ("/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
64
- });
73
+ testEncodeUrl (new MockHttpServletRequest ("GET" , "/" ),
74
+ "/resources/bar.css" , "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
65
75
}
66
76
67
77
@ Test
68
- public void encodeURLWithContext () throws Exception {
78
+ public void encodeUrlWithContext () throws Exception {
69
79
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
70
80
request .setContextPath ("/context" );
71
- MockHttpServletResponse response = new MockHttpServletResponse ();
72
81
73
- this .filter .doFilter (request , response , (req , res ) -> {
74
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
75
- String result = ((HttpServletResponse ) res ).encodeURL ("/context/resources/bar.css" );
76
- assertEquals ("/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
77
- });
82
+ testEncodeUrl (request , "/context/resources/bar.css" ,
83
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
78
84
}
79
85
80
86
81
87
@ Test
82
88
public void encodeUrlWithContextAndForwardedRequest () throws Exception {
83
89
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
84
90
request .setContextPath ("/context" );
85
- MockHttpServletResponse response = new MockHttpServletResponse ();
86
91
87
- this .filter .doFilter (request , response , (req , res ) -> {
92
+ this .filter .doFilter (request , new MockHttpServletResponse () , (req , res ) -> {
88
93
req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
89
94
request .setRequestURI ("/forwarded" );
90
95
request .setContextPath ("/" );
@@ -93,84 +98,71 @@ public void encodeUrlWithContextAndForwardedRequest() throws Exception {
93
98
});
94
99
}
95
100
96
- // SPR-13757
97
- @ Test
101
+ @ Test // SPR-13757
98
102
public void encodeContextPathUrlWithoutSuffix () throws Exception {
99
103
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context" );
100
104
request .setContextPath ("/context" );
101
- MockHttpServletResponse response = new MockHttpServletResponse ();
102
105
103
- this .filter .doFilter (request , response , (req , res ) -> {
104
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
105
- String result = ((HttpServletResponse ) res ).encodeURL ("/context/resources/bar.css" );
106
- assertEquals ("/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
107
- });
106
+ testEncodeUrl (request , "/context/resources/bar.css" ,
107
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
108
108
}
109
109
110
110
@ Test
111
111
public void encodeContextPathUrlWithSuffix () throws Exception {
112
112
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/" );
113
113
request .setContextPath ("/context" );
114
- MockHttpServletResponse response = new MockHttpServletResponse ();
115
114
116
- this .filter .doFilter (request , response , (req , res ) -> {
117
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
118
- String result = ((HttpServletResponse ) res ).encodeURL ("/context/resources/bar.css" );
119
- assertEquals ("/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
120
- });
115
+ testEncodeUrl (request , "/context/resources/bar.css" ,
116
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
121
117
}
122
118
123
- // SPR-13018
124
- @ Test
125
- public void encodeEmptyURLWithContext () throws Exception {
119
+ @ Test // SPR-13018
120
+ public void encodeEmptyUrlWithContext () throws Exception {
126
121
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
127
122
request .setContextPath ("/context" );
128
- MockHttpServletResponse response = new MockHttpServletResponse ();
129
123
130
- this .filter .doFilter (request , response , (req , res ) -> {
131
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
132
- String result = ((HttpServletResponse ) res ).encodeURL ("?foo=1" );
133
- assertEquals ("?foo=1" , result );
134
- });
124
+ testEncodeUrl (request , "?foo=1" , "?foo=1" );
135
125
}
136
126
137
- // SPR-13374
138
- @ Test
139
- public void encodeURLWithRequestParams () throws Exception {
127
+ @ Test // SPR-13374
128
+ public void encodeUrlWithRequestParams () throws Exception {
140
129
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/foo" );
141
130
request .setContextPath ("/" );
142
- MockHttpServletResponse response = new MockHttpServletResponse ();
143
131
144
- this .filter .doFilter (request , response , (req , res ) -> {
145
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
146
- String result = ((HttpServletResponse ) res ).encodeURL ("/resources/bar.css?foo=bar&url=http://example.org" );
147
- assertEquals ("/resources/bar-11e16cf79faee7ac698c805cf28248d2.css?foo=bar&url=http://example.org" , result );
148
- });
132
+ testEncodeUrl (request , "/resources/bar.css?foo=bar&url=http://example.org" ,
133
+ "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css?foo=bar&url=http://example.org" );
149
134
}
150
135
151
- // SPR-13847
152
- @ Test
136
+ @ Test // SPR-13847
153
137
public void encodeUrlPreventStringOutOfBounds () throws Exception {
154
138
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context-path/index" );
155
139
request .setContextPath ("/context-path" );
156
140
request .setServletPath ("" );
157
- MockHttpServletResponse response = new MockHttpServletResponse ();
158
141
159
- this .filter .doFilter (request , response , (req , res ) -> {
160
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
161
- String result = ((HttpServletResponse ) res ).encodeURL ("index?key=value" );
162
- assertEquals ("index?key=value" , result );
163
- });
142
+ testEncodeUrl (request , "index?key=value" , "index?key=value" );
143
+ }
144
+
145
+ @ Test // gh-22552
146
+ public void encodeUrlWithFragment () throws Exception {
147
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/foo" );
148
+ request .setContextPath ("/" );
149
+
150
+ testEncodeUrl (request , "/resources/bar.css#something" ,
151
+ "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css#something" );
152
+
153
+ testEncodeUrl (request ,
154
+ "/resources/bar.css?foo=bar&url=http://example.org#something" ,
155
+ "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css?foo=bar&url=http://example.org#something" );
164
156
}
165
157
158
+ private void testEncodeUrl (MockHttpServletRequest request , String url , String expected )
159
+ throws ServletException , IOException {
166
160
167
- protected ResourceUrlProvider createResourceUrlProvider (List <ResourceResolver > resolvers ) {
168
- ResourceHttpRequestHandler handler = new ResourceHttpRequestHandler ();
169
- handler .setLocations (Arrays .asList (new ClassPathResource ("test/" , getClass ())));
170
- handler .setResourceResolvers (resolvers );
171
- ResourceUrlProvider urlProvider = new ResourceUrlProvider ();
172
- urlProvider .setHandlerMap (Collections .singletonMap ("/resources/**" , handler ));
173
- return urlProvider ;
161
+ this .filter .doFilter (request , new MockHttpServletResponse (), (req , res ) -> {
162
+ req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
163
+ String result = ((HttpServletResponse ) res ).encodeURL (url );
164
+ assertEquals (expected , result );
165
+ });
174
166
}
175
167
176
168
}
0 commit comments