@@ -876,7 +876,7 @@ class SpaCsrfTokenRequestHandler : CsrfTokenRequestAttributeHandler() {
876
876
delegate.handle(request, response, csrfToken)
877
877
}
878
878
879
- override fun resolveCsrfTokenValue(request: HttpServletRequest, csrfToken: CsrfToken): String {
879
+ override fun resolveCsrfTokenValue(request: HttpServletRequest, csrfToken: CsrfToken): String? {
880
880
/*
881
881
* If the request contains a request header, use CsrfTokenRequestAttributeHandler
882
882
* to resolve the CsrfToken. This applies when a single-page application includes
@@ -1221,6 +1221,24 @@ public class CsrfTests {
1221
1221
.andExpect(header().string(HttpHeaders.LOCATION, "/"));
1222
1222
}
1223
1223
1224
+ @Test
1225
+ public void loginWhenInvalidCsrfTokenThenForbidden() throws Exception {
1226
+ this.mockMvc.perform(post("/login").with(csrf().useInvalidToken())
1227
+ .accept(MediaType.TEXT_HTML)
1228
+ .param("username", "user")
1229
+ .param("password", "password"))
1230
+ .andExpect(status().isForbidden());
1231
+ }
1232
+
1233
+ @Test
1234
+ public void loginWhenMissingCsrfTokenThenForbidden() throws Exception {
1235
+ this.mockMvc.perform(post("/login")
1236
+ .accept(MediaType.TEXT_HTML)
1237
+ .param("username", "user")
1238
+ .param("password", "password"))
1239
+ .andExpect(status().isForbidden());
1240
+ }
1241
+
1224
1242
@Test
1225
1243
@WithMockUser
1226
1244
public void logoutWhenValidCsrfTokenThenSuccess() throws Exception {
@@ -1264,6 +1282,24 @@ class CsrfTests {
1264
1282
.andExpect(header().string(HttpHeaders.LOCATION, "/"))
1265
1283
}
1266
1284
1285
+ @Test
1286
+ fun loginWhenInvalidCsrfTokenThenForbidden() {
1287
+ mockMvc.perform(post("/login").with(csrf().useInvalidToken())
1288
+ .accept(MediaType.TEXT_HTML)
1289
+ .param("username", "user")
1290
+ .param("password", "password"))
1291
+ .andExpect(status().isForbidden)
1292
+ }
1293
+
1294
+ @Test
1295
+ fun loginWhenMissingCsrfTokenThenForbidden() {
1296
+ mockMvc.perform(post("/login")
1297
+ .accept(MediaType.TEXT_HTML)
1298
+ .param("username", "user")
1299
+ .param("password", "password"))
1300
+ .andExpect(status().isForbidden)
1301
+ }
1302
+
1267
1303
@Test
1268
1304
@WithMockUser
1269
1305
@Throws(Exception::class)
0 commit comments