2021-10-30 00:09:04 +08:00
= Testing Authentication
After xref:reactive/test/web/setup.adoc[applying the Spring Security support to `WebTestClient`] we can use either annotations or `mutateWith` support.
For example:
2023-06-19 10:30:41 +08:00
[tabs]
======
Java::
+
2021-10-30 00:09:04 +08:00
[source,java,role="primary"]
----
2023-04-11 20:56:19 +08:00
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser;
2021-10-30 00:09:04 +08:00
@Test
public void messageWhenNotAuthenticated() throws Exception {
this.rest
.get()
.uri("/message")
.exchange()
.expectStatus().isUnauthorized();
}
// --- WithMockUser ---
@Test
@WithMockUser
public void messageWhenWithMockUserThenForbidden() throws Exception {
this.rest
.get()
.uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN);
}
@Test
@WithMockUser(roles = "ADMIN")
public void messageWhenWithMockAdminThenOk() throws Exception {
this.rest
.get()
.uri("/message")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World!");
}
// --- mutateWith mockUser ---
@Test
public void messageWhenMutateWithMockUserThenForbidden() throws Exception {
this.rest
.mutateWith(mockUser())
.get()
.uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN);
}
@Test
public void messageWhenMutateWithMockAdminThenOk() throws Exception {
this.rest
.mutateWith(mockUser().roles("ADMIN"))
.get()
.uri("/message")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Hello World!");
}
----
2023-06-19 10:30:41 +08:00
Kotlin::
+
2021-10-30 00:09:04 +08:00
[source,kotlin,role="secondary"]
----
import org.springframework.test.web.reactive.server.expectBody
2023-04-11 20:56:19 +08:00
import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser
2021-10-30 00:09:04 +08:00
//...
@Test
@WithMockUser
fun messageWhenWithMockUserThenForbidden() {
this.rest.get().uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
}
@Test
@WithMockUser(roles = ["ADMIN"])
fun messageWhenWithMockAdminThenOk() {
this.rest.get().uri("/message")
.exchange()
.expectStatus().isOk
.expectBody<String>().isEqualTo("Hello World!")
}
// --- mutateWith mockUser ---
@Test
fun messageWhenMutateWithMockUserThenForbidden() {
this.rest
.mutateWith(mockUser())
.get().uri("/message")
.exchange()
.expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
}
@Test
fun messageWhenMutateWithMockAdminThenOk() {
this.rest
.mutateWith(mockUser().roles("ADMIN"))
.get().uri("/message")
.exchange()
.expectStatus().isOk
.expectBody<String>().isEqualTo("Hello World!")
}
----
2023-06-19 10:30:41 +08:00
======
2021-10-30 00:09:04 +08:00
In addition to `mockUser()`, Spring Security ships with several other convenience mutators for things like xref:reactive/test/web/csrf.adoc[CSRF] and xref:reactive/test/web/oauth2.adoc[OAuth 2.0].