Как использовать форму входа с Rest Assured с Spring MVC / Thymeleaf? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть приложение Spring Boot 2.1.4, использующее Thymeleaf с довольно стандартной формой входа:

<form class="form-horizontal" th:action="@{/login}" method="post">
  <input type="text" class="form-control" name="username" th:placeholder="#{username}"/>
  <input type="password" class="form-control" name="password" th:placeholder="#{password}"/>

  <button type="submit" class="btn btn-default btn-md action-button-primary" th:text="#{login}"></button>
</form>

При запуске приложения все работает нормально, и я могу войти в систему.

Теперь я хочу написать интеграционный тест с использованием Rest Assured, который обращается к защищенной странице.

given().auth()
       .form("admin", "admin",
              new FormAuthConfig("/login", "username", "password")
                .withLoggingEnabled()
                .withAutoDetectionOfCsrf())
    .when()
    .get("/people")
    .then()
    .log()
    .all().assertThat().statusCode(HttpStatus.SC_OK);

В журнале я вижу, что запрос POST выполнен:

Request method: POST
Request URI:    http://localhost:58352/login
Proxy:          <none>
Request params: <none>
Query params:   <none>
Form params:    username=admin
                password=admin
                _csrf=2296f8a3-39a5-48b2-99ec-a20ed01cfeec
Path params:    <none>
Headers:        Accept=*/*
                Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1

Тем не менее, «Будьте уверены» никогда не окажутся на странице /people.Похоже, он снова перенаправляется на /login.

Если я включаю ведение журнала отладки Spring Security, я вижу:

CsrfFilter - Invalid CSRF token found for http://localhost:58352/login

Я предполагаю, что Rest Assured каким-то образом использует неправильный CSRFфишка?Что я делаю не так?

...