You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 23集成Spring Boot时POST请求无法连接求助

问题分析

你的POST请求被Vaadin拦截并返回默认HTML页面,核心原因主要有两个:

  1. Spring Security默认开启的CSRF保护会拦截所有POST请求,即使/api/**已配置permitAll,仍会校验CSRF Token,导致请求无法到达Controller
  2. 配置规则的执行顺序或Vaadin的请求匹配逻辑,可能导致/api路径的POST请求被Vaadin的处理链接管
解决方案

1. 排除/api路径的CSRF校验

在SecurityConfiguration的configure(HttpSecurity)方法中添加CSRF忽略规则,让/api下的所有请求跳过CSRF校验:

@Override
protected void configure(HttpSecurity http) throws Exception {
    
    http.authorizeRequests()
        .antMatchers("/api/**")
        .permitAll();

    // 添加CSRF忽略配置,允许/api路径的POST请求跳过校验
    http.csrf().ignoringAntMatchers("/api/**");

    super.configure(http);
    setLoginView(http, LoginView.class, LOGOUT_SUCCESS_URL);

    http.rememberMe().key("ABC")
        .tokenValiditySeconds(2 * 24 * 60 * 60)
        .userDetailsService(this.userDetailsService);

    http.logout()
        .invalidateHttpSession(true)
        .deleteCookies("JSESSIONID", "remember-me");
}

2. 确保请求路径和请求头完全正确

结合你的配置,POST请求的完整路径应为:
POST http://localhost:8080/project/api/test/postbody
必须包含/project这个context-path,同时请求头必须携带Content-Type: application/json,请求体可以是任意合法JSON内容(比如{"content":"测试内容"})

3. 验证Vaadin URL映射生效

确认vaadin.urlMapping=/ui/*配置已正确加载,Vaadin仅处理/ui开头的请求。可以查看应用启动日志,确认Vaadin Servlet的映射路径显示为/ui/*。

验证步骤
  1. 修改配置后重启应用
  2. 使用Postman重新发送POST请求,检查返回内容是否为Received: [你的请求体内容]
  3. 若仍有问题,查看启动日志,确认TestRestController的POST端点已被正确注册(日志会显示类似Mapped "{[/api/test/postbody],methods=[POST]}"的内容)

内容的提问来源于stack exchange,提问作者Szyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 00:25:26