The way to solve this issue is :
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*;
...
@Test
public void testLogin() throws Exception {
this.mockMvc.perform(post("/login")
.param("username", "...")
.param("password", "...")
.with(csrf()))
.andExpect(status().isFound())
.andExpect(header().string("Location", "redirect-url-on-success-login"));
}
The important part is : .with(csrf())
which will add the expected _csrf
parameter to the query.
The csrf()
static method is provided by spring-security-test
:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>5.3.5.RELEASE / 5.4.1</version>
<scope>test</scope>
</dependency>
Your unit test will require the following import to access it:
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*;