У меня есть приложение 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фишка?Что я делаю не так?