authentication.adoc 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. = Testing Authentication
  2. After xref:reactive/test/web/setup.adoc[applying the Spring Security support to `WebTestClient`], we can use either annotations or `mutateWith` support -- for example:
  3. ====
  4. .Java
  5. [source,java,role="primary"]
  6. ----
  7. import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser;
  8. @Test
  9. public void messageWhenNotAuthenticated() throws Exception {
  10. this.rest
  11. .get()
  12. .uri("/message")
  13. .exchange()
  14. .expectStatus().isUnauthorized();
  15. }
  16. // --- WithMockUser ---
  17. @Test
  18. @WithMockUser
  19. public void messageWhenWithMockUserThenForbidden() throws Exception {
  20. this.rest
  21. .get()
  22. .uri("/message")
  23. .exchange()
  24. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN);
  25. }
  26. @Test
  27. @WithMockUser(roles = "ADMIN")
  28. public void messageWhenWithMockAdminThenOk() throws Exception {
  29. this.rest
  30. .get()
  31. .uri("/message")
  32. .exchange()
  33. .expectStatus().isOk()
  34. .expectBody(String.class).isEqualTo("Hello World!");
  35. }
  36. // --- mutateWith mockUser ---
  37. @Test
  38. public void messageWhenMutateWithMockUserThenForbidden() throws Exception {
  39. this.rest
  40. .mutateWith(mockUser())
  41. .get()
  42. .uri("/message")
  43. .exchange()
  44. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN);
  45. }
  46. @Test
  47. public void messageWhenMutateWithMockAdminThenOk() throws Exception {
  48. this.rest
  49. .mutateWith(mockUser().roles("ADMIN"))
  50. .get()
  51. .uri("/message")
  52. .exchange()
  53. .expectStatus().isOk()
  54. .expectBody(String.class).isEqualTo("Hello World!");
  55. }
  56. ----
  57. .Kotlin
  58. [source,kotlin,role="secondary"]
  59. ----
  60. import org.springframework.test.web.reactive.server.expectBody
  61. import org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.mockUser
  62. //...
  63. @Test
  64. @WithMockUser
  65. fun messageWhenWithMockUserThenForbidden() {
  66. this.rest.get().uri("/message")
  67. .exchange()
  68. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
  69. }
  70. @Test
  71. @WithMockUser(roles = ["ADMIN"])
  72. fun messageWhenWithMockAdminThenOk() {
  73. this.rest.get().uri("/message")
  74. .exchange()
  75. .expectStatus().isOk
  76. .expectBody<String>().isEqualTo("Hello World!")
  77. }
  78. // --- mutateWith mockUser ---
  79. @Test
  80. fun messageWhenMutateWithMockUserThenForbidden() {
  81. this.rest
  82. .mutateWith(mockUser())
  83. .get().uri("/message")
  84. .exchange()
  85. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
  86. }
  87. @Test
  88. fun messageWhenMutateWithMockAdminThenOk() {
  89. this.rest
  90. .mutateWith(mockUser().roles("ADMIN"))
  91. .get().uri("/message")
  92. .exchange()
  93. .expectStatus().isOk
  94. .expectBody<String>().isEqualTo("Hello World!")
  95. }
  96. ----
  97. ====
  98. 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].