authentication.adoc 2.7 KB

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