0 Tage Serie
java / intermediate
Snippet

Injizieren von Mock-JWT-Claims in WebMvc-Slice-Tests mit SecurityMockMvcRequestPostProcessors

In Spring Security mit OAuth2-Resource-Servern greifen Controller-Methoden häufig auf Claims innerhalb eines `JwtAuthenticationToken` zu. Das Hilfsmittel `SecurityMockMvcRequestPostProcessors.jwt()` simuliert authentifizierte HTTP-Anfragen in leichtgewichtigen `@WebMvcTest`-Slice-Tests, ohne dass ein aktiver Authorization-Server oder eine echte Token-Signierung erforderlich ist.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@WebMvcTest(AuditReportController.class)
class AuditReportControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
void shouldAllowAccessWhenAuditorRolePresentInJwt() throws Exception {
mockMvc.perform(get("/api/v1/audit/financials")
.with(jwt().jwt(builder -> builder
.subject("auditor-101")
.claim("roles", List.of("ROLE_AUDITOR"))
.claim("department", "Finance"))))
.andExpect(status().isOk())
.andExpect(header().string("Content-Type", "application/json"));
}
}
spring
Erklärung
1
@WebMvcTest(AuditReportController.class)
Startet einen fokussierten MVC-Test-Slice, der nur Komponenten der Webschicht und Spring-Security-Filter lädt.
2
.with(jwt().jwt(builder -> builder
Injiziert einen benutzerdefinierten Mock-SecurityContext mit einem Test-JWT in die Anfrageausführung.
3
.claim("roles", List.of("ROLE_AUDITOR"))
Konfiguriert spezifische JWT-Claims, um @PreAuthorize-Rollenprüfungen am Controller zu erfüllen.
4
.andExpect(status().isOk())
Stellt sicher, dass die Autorisierung erfolgreich war und der Endpunkt den HTTP-Status 200 zurückgibt.