authentication.adoc 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. @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. //...
  65. @Test
  66. @WithMockUser
  67. fun messageWhenWithMockUserThenForbidden() {
  68. this.rest.get().uri("/message")
  69. .exchange()
  70. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
  71. }
  72. @Test
  73. @WithMockUser(roles = ["ADMIN"])
  74. fun messageWhenWithMockAdminThenOk() {
  75. this.rest.get().uri("/message")
  76. .exchange()
  77. .expectStatus().isOk
  78. .expectBody<String>().isEqualTo("Hello World!")
  79. }
  80. // --- mutateWith mockUser ---
  81. @Test
  82. fun messageWhenMutateWithMockUserThenForbidden() {
  83. this.rest
  84. .mutateWith(mockUser())
  85. .get().uri("/message")
  86. .exchange()
  87. .expectStatus().isEqualTo(HttpStatus.FORBIDDEN)
  88. }
  89. @Test
  90. fun messageWhenMutateWithMockAdminThenOk() {
  91. this.rest
  92. .mutateWith(mockUser().roles("ADMIN"))
  93. .get().uri("/message")
  94. .exchange()
  95. .expectStatus().isOk
  96. .expectBody<String>().isEqualTo("Hello World!")
  97. }
  98. ----
  99. ======
  100. 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].