Skip to content

Commit b55b291

Browse files
committed
Mock Jwt Disables CSRF
Fixes gh-7170
1 parent aa12748 commit b55b291

File tree

3 files changed

+12
-23
lines changed

3 files changed

+12
-23
lines changed

samples/boot/oauth2resourceserver/src/test/java/sample/OAuth2ResourceServerControllerTests.java

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,13 @@
2525
import org.springframework.security.oauth2.jwt.JwtDecoder;
2626
import org.springframework.test.context.junit4.SpringRunner;
2727
import org.springframework.test.web.servlet.MockMvc;
28-
import org.springframework.security.oauth2.jwt.Jwt;
2928

3029
import static org.hamcrest.CoreMatchers.is;
3130
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt;
3231
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
3332
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
3433
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
3534
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
36-
import static org.mockito.ArgumentMatchers.anyString;
37-
import static org.mockito.Mockito.when;
3835

3936
/**
4037
*
@@ -77,41 +74,26 @@ public void messageCanNotBeReadWithoutScopeMessageReadAuthority() throws Excepti
7774

7875
@Test
7976
public void messageCanNotBeCreatedWithoutAnyScope() throws Exception {
80-
Jwt jwt = Jwt.withTokenValue("token")
81-
.header("alg", "none")
82-
.claim("scope", "")
83-
.build();
84-
when(jwtDecoder.decode(anyString())).thenReturn(jwt);
8577
mockMvc.perform(post("/message")
8678
.content("Hello message")
87-
.header("Authorization", "Bearer " + jwt.getTokenValue()))
79+
.with(jwt()))
8880
.andExpect(status().isForbidden());
8981
}
9082

9183
@Test
9284
public void messageCanNotBeCreatedWithScopeMessageReadAuthority() throws Exception {
93-
Jwt jwt = Jwt.withTokenValue("token")
94-
.header("alg", "none")
95-
.claim("scope", "message:read")
96-
.build();
97-
when(jwtDecoder.decode(anyString())).thenReturn(jwt);
9885
mockMvc.perform(post("/message")
9986
.content("Hello message")
100-
.header("Authorization", "Bearer " + jwt.getTokenValue()))
87+
.with(jwt(jwt -> jwt.claim("scope", "message:read"))))
10188
.andExpect(status().isForbidden());
10289
}
10390

10491
@Test
10592
public void messageCanBeCreatedWithScopeMessageWriteAuthority()
10693
throws Exception {
107-
Jwt jwt = Jwt.withTokenValue("token")
108-
.header("alg", "none")
109-
.claim("scope", "message:write")
110-
.build();
111-
when(jwtDecoder.decode(anyString())).thenReturn(jwt);
11294
mockMvc.perform(post("/message")
11395
.content("Hello message")
114-
.header("Authorization", "Bearer " + jwt.getTokenValue()))
96+
.with(jwt(jwt -> jwt.claim("scope", "message:write"))))
11597
.andExpect(status().isOk())
11698
.andExpect(content().string(is("Message was created. Content: Hello message")));
11799
}

test/src/main/java/org/springframework/security/test/web/reactive/server/SecurityMockServerConfigurers.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,10 @@ public void afterConfigurerAdded(
419419
WebTestClient.Builder builder,
420420
@Nullable WebHttpHandlerBuilder httpHandlerBuilder,
421421
@Nullable ClientHttpConnector connector) {
422+
httpHandlerBuilder.filter((exchange, chain) -> {
423+
CsrfWebFilter.skipExchange(exchange);
424+
return chain.filter(exchange);
425+
});
422426
configurer().afterConfigurerAdded(builder, httpHandlerBuilder, connector);
423427
}
424428

test/src/main/java/org/springframework/security/test/web/servlet/request/SecurityMockMvcRequestPostProcessors.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.springframework.security.web.context.HttpRequestResponseHolder;
5656
import org.springframework.security.web.context.SecurityContextPersistenceFilter;
5757
import org.springframework.security.web.context.SecurityContextRepository;
58+
import org.springframework.security.web.csrf.CsrfFilter;
5859
import org.springframework.security.web.csrf.CsrfToken;
5960
import org.springframework.security.web.csrf.CsrfTokenRepository;
6061
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
@@ -63,6 +64,7 @@
6364
import org.springframework.util.Assert;
6465
import org.springframework.util.DigestUtils;
6566

67+
import static java.lang.Boolean.TRUE;
6668
import static org.springframework.security.oauth2.jwt.JwtClaimNames.SUB;
6769

6870
/**
@@ -502,11 +504,11 @@ public CsrfToken loadToken(HttpServletRequest request) {
502504
}
503505

504506
public static void enable(HttpServletRequest request) {
505-
request.setAttribute(ENABLED_ATTR_NAME, Boolean.TRUE);
507+
request.setAttribute(ENABLED_ATTR_NAME, TRUE);
506508
}
507509

508510
public boolean isEnabled(HttpServletRequest request) {
509-
return Boolean.TRUE.equals(request.getAttribute(ENABLED_ATTR_NAME));
511+
return TRUE.equals(request.getAttribute(ENABLED_ATTR_NAME));
510512
}
511513
}
512514
}
@@ -1043,6 +1045,7 @@ public JwtRequestPostProcessor authorities(Converter<Jwt, Collection<GrantedAuth
10431045

10441046
@Override
10451047
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
1048+
CsrfFilter.skipRequest(request);
10461049
JwtAuthenticationToken token = new JwtAuthenticationToken(this.jwt, this.authorities);
10471050
return new AuthenticationRequestPostProcessor(token).postProcessRequest(request);
10481051
}

0 commit comments

Comments
 (0)