Spring 5 中的 .csrf() 方法现在位于哪个包中?

Posted

技术标签:

【中文标题】Spring 5 中的 .csrf() 方法现在位于哪个包中?【英文标题】:In what package is now located the .csrf() method in Spring 5? 【发布时间】:2021-11-09 15:40:17 【问题描述】:

我正在尝试编写 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 的一些新想法?

谢谢。

【问题讨论】:

【参考方案1】:

要使用 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()))

【讨论】:

安全下的包测试不存在了,就是这个问题【参考方案2】:

你可以如下使用它

csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())

【讨论】:

【参考方案3】:

我的回答是基于 Spring Reactive。 Spring Boot:2.6.1

在 build.gradle 中添加以下条目

testImplementation 'org.springframework.security:spring-security-test'

然后,csrf() 方法将从下面的 import 中可用

import static org.springframework.security.test.web.reactive.server.SecurityMockServerConfigurers.csrf;

【讨论】:

以上是关于Spring 5 中的 .csrf() 方法现在位于哪个包中?的主要内容,如果未能解决你的问题,请参考以下文章

尽管以表单形式发送 CSRF 令牌,但不支持 Spring Security CSRF 405 方法 POST

Spring Security CSRF 令牌不适用于 AJAX

带有 axios 和 vue 的 laravel 5.8 中的 CSRF

Ajax POST 不适用于 spring security csrf,但 GET 方法有效

CORS与CSRF在Spring Security中的使用

X-CSRF-TOKEN 不是 Spring Boot 生成的