我正在尝试写一篇IT。
mockMvc.perform( post( "/my_endpoint" )
.contentType( MediaType.APPLICATION_JSON )
.header("Authorization", my_credentials)
.with(csrf())
.content( jsonPayload )
)
.andExpect( status().isOk() );
我需要导入
csrf()
静态方法,但是通常创建的包(org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors...)不再存在。
关于如何编写 csrf 保护以避免测试中出现
403
的一些新想法?
谢谢。
要使用 Spring Security 测试支持,您必须包含 spring-security-test-5.1.2.RELEASE.jar 作为项目的依赖项。 并在下面尝试一下:-
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProce ssors.*;
mvc.perform(post("/").with(csrf()))
或者,
mvc.perform(post("/").with(csrf().asHeader()))
或者,
mvc.perform(post("/").with(csrf().useInvalidToken()))
您可以按如下方式使用
csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
我的回答是基于Spring Reactive。 春季启动:2.6.1
在 build.gradle 中添加以下条目
testImplementation 'org.springframework.security:spring-security-test'
然后,csrf()方法将可以从下面的导入中使用
import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf;
对于Maven,你可以添加这个
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
在你的课堂上,你可以添加它来获取对 csrf() 的引用
import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors
在你的函数中添加
SecurityMockMvcRequestPostProcessors.csrf()