authentication.adoc 2.5 KB

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