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 {@Autowiredprivate MockMvc mockMvc;@Testvoid 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.