15
15
*/
16
16
package org .springframework .web .servlet .resource ;
17
17
18
+ import java .io .IOException ;
18
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 ;
@@ -68,37 +70,26 @@ private ResourceUrlProvider createResourceUrlProvider(List<ResourceResolver> res
68
70
69
71
@ Test
70
72
public void encodeURL () throws Exception {
71
- MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/" );
72
- MockHttpServletResponse response = new MockHttpServletResponse ();
73
-
74
- this .filter .doFilter (request , response , (req , res ) -> {
75
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
76
- String result = ((HttpServletResponse ) res ).encodeURL ("/resources/bar.css" );
77
- assertEquals ("/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
78
- });
73
+ testEncodeUrl (new MockHttpServletRequest ("GET" , "/" ),
74
+ "/resources/bar.css" , "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
79
75
}
80
76
81
77
@ Test
82
- public void encodeURLWithContext () throws Exception {
78
+ public void encodeUrlWithContext () throws Exception {
83
79
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
84
80
request .setContextPath ("/context" );
85
- MockHttpServletResponse response = new MockHttpServletResponse ();
86
81
87
- this .filter .doFilter (request , response , (req , res ) -> {
88
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
89
- String result = ((HttpServletResponse ) res ).encodeURL ("/context/resources/bar.css" );
90
- assertEquals ("/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
91
- });
82
+ testEncodeUrl (request , "/context/resources/bar.css" ,
83
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
92
84
}
93
85
94
86
95
87
@ Test
96
88
public void encodeUrlWithContextAndForwardedRequest () throws Exception {
97
89
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
98
90
request .setContextPath ("/context" );
99
- MockHttpServletResponse response = new MockHttpServletResponse ();
100
91
101
- this .filter .doFilter (request , response , (req , res ) -> {
92
+ this .filter .doFilter (request , new MockHttpServletResponse () , (req , res ) -> {
102
93
req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
103
94
request .setRequestURI ("/forwarded" );
104
95
request .setContextPath ("/" );
@@ -111,65 +102,66 @@ public void encodeUrlWithContextAndForwardedRequest() throws Exception {
111
102
public void encodeContextPathUrlWithoutSuffix () throws Exception {
112
103
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context" );
113
104
request .setContextPath ("/context" );
114
- MockHttpServletResponse response = new MockHttpServletResponse ();
115
105
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
- });
106
+ testEncodeUrl (request , "/context/resources/bar.css" ,
107
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
121
108
}
122
109
123
110
@ Test
124
111
public void encodeContextPathUrlWithSuffix () throws Exception {
125
112
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/" );
126
113
request .setContextPath ("/context" );
127
- MockHttpServletResponse response = new MockHttpServletResponse ();
128
114
129
- this .filter .doFilter (request , response , (req , res ) -> {
130
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
131
- String result = ((HttpServletResponse ) res ).encodeURL ("/context/resources/bar.css" );
132
- assertEquals ("/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" , result );
133
- });
115
+ testEncodeUrl (request , "/context/resources/bar.css" ,
116
+ "/context/resources/bar-11e16cf79faee7ac698c805cf28248d2.css" );
134
117
}
135
118
136
119
@ Test // SPR-13018
137
- public void encodeEmptyURLWithContext () throws Exception {
120
+ public void encodeEmptyUrlWithContext () throws Exception {
138
121
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context/foo" );
139
122
request .setContextPath ("/context" );
140
- MockHttpServletResponse response = new MockHttpServletResponse ();
141
123
142
- this .filter .doFilter (request , response , (req , res ) -> {
143
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
144
- String result = ((HttpServletResponse ) res ).encodeURL ("?foo=1" );
145
- assertEquals ("?foo=1" , result );
146
- });
124
+ testEncodeUrl (request , "?foo=1" , "?foo=1" );
147
125
}
148
126
149
127
@ Test // SPR-13374
150
- public void encodeURLWithRequestParams () throws Exception {
128
+ public void encodeUrlWithRequestParams () throws Exception {
151
129
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/foo" );
152
130
request .setContextPath ("/" );
153
- MockHttpServletResponse response = new MockHttpServletResponse ();
154
131
155
- this .filter .doFilter (request , response , (req , res ) -> {
156
- req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
157
- String result = ((HttpServletResponse ) res ).encodeURL ("/resources/bar.css?foo=bar&url=http://example.org" );
158
- assertEquals ("/resources/bar-11e16cf79faee7ac698c805cf28248d2.css?foo=bar&url=http://example.org" , result );
159
- });
132
+ testEncodeUrl (request , "/resources/bar.css?foo=bar&url=http://example.org" ,
133
+ "/resources/bar-11e16cf79faee7ac698c805cf28248d2.css?foo=bar&url=http://example.org" );
160
134
}
161
135
162
136
@ Test // SPR-13847
163
137
public void encodeUrlPreventStringOutOfBounds () throws Exception {
164
138
MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/context-path/index" );
165
139
request .setContextPath ("/context-path" );
166
140
request .setServletPath ("" );
167
- MockHttpServletResponse response = new MockHttpServletResponse ();
168
141
169
- this .filter .doFilter (request , response , (req , res ) -> {
142
+ testEncodeUrl (request , "index?key=value" , "index?key=value" );
143
+ }
144
+
145
+ @ Test // SPR-17535
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" );
156
+ }
157
+
158
+ private void testEncodeUrl (MockHttpServletRequest request , String url , String expected )
159
+ throws ServletException , IOException {
160
+
161
+ this .filter .doFilter (request , new MockHttpServletResponse (), (req , res ) -> {
170
162
req .setAttribute (ResourceUrlProviderExposingInterceptor .RESOURCE_URL_PROVIDER_ATTR , this .urlProvider );
171
- String result = ((HttpServletResponse ) res ).encodeURL ("index?key=value" );
172
- assertEquals ("index?key=value" , result );
163
+ String result = ((HttpServletResponse ) res ).encodeURL (url );
164
+ assertEquals (expected , result );
173
165
});
174
166
}
175
167
0 commit comments