uiroshan câu trả lời của bạn là đánh bại mục đích của CSRF mã thông báo: với cấu hình của bạn bây giờ nó sẽ là một giá trị không đổi (trừ khi cấu hình của bạn chỉ được sử dụng trong bối cảnh thử nghiệm của bạn, nhưng bạn không nói rõ nó) .
Quyền (và dễ dàng hơn) cách để giải quyết vấn đề này là:
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"));
}
Phần quan trọng là: .with(csrf())
mà sẽ bổ sung dự kiến _csrf
tham số để truy vấn.
Các csrf()
phương pháp tĩnh được cung cấp bởi spring-security-test
:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<version>4.2.4.RELEASE/5.0.2.RELEASE</version>
<scope>test</scope>
</dependency>
kiểm tra đơn vị của bạn sẽ yêu cầu nhập khẩu sau đây để truy cập vào nó:
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*;