authentication.adoc 2.7 KB

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