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