如何使用spring Boot 3覆盖spring security中的csrf生成?

xcitsw88  于 2023-04-30  发布在  Spring
关注(0)|答案(1)|浏览(170)

我尝试使用CsrfTokenRepository覆盖csrf令牌创建。该解决方案与spring-boot 2配合良好。x,但不与3一起工作。x:
配置类:

@Configuration
@EnableWebSecurity
public class ProjectConfig  {

    @Bean
    public CsrfTokenRepository customTokenRepository() {
        return new CustomCsrfTokenRepository();
    }

    @Bean
    public SecurityFilterChain configuration(HttpSecurity http) throws Exception {
        http
                .csrf(c -> {
                    c.csrfTokenRepository(customTokenRepository());
                })
                .authorizeHttpRequests()
                .anyRequest().permitAll();
        return http.build();
    }
  • CustomCsrfTokenRepository:
public class CustomCsrfTokenRepository implements CsrfTokenRepository {
@Override
public CsrfToken generateToken(HttpServletRequest request){
 log.info(1);
{

@Override
public void saveToken(CsrfToken token, HttpServletRequest request, HttpServletResponse response){
 log.info(2);
}

@Override
public CsrfToken loadToken(HttpServletRequest request){
 log.info(3);
}
}

我创建了一个简单的端点:

@GetMapping("/hello")
public String getHello() {
 return "Get Hello!";
}

现在,当我获取/hello端点时,我希望代码到达CustomCsrfTokenRepository#loadToken方法(与spring-boot 2一样。x),但我只收到“Get Hello!”的回应。
我确定了2之间的差异。x和3.xSpring Boot ,其中CsrfTokenRepository导入不同的HttpServlet...示例:对于javax.servlet.http...库中的2.x,对于3。x -从jakatra..
如何在spring-boot 3中正确重复此解决方案。x?

gjmwrych

gjmwrych1#

在Spring Security 6中,CSRF令牌仅在需要时延迟创建。您的端点不需要它,因此不会创建它。

相关问题