Vaadin 23集成Spring Boot时POST请求无法连接求助
问题分析
你的POST请求被Vaadin拦截并返回默认HTML页面,核心原因主要有两个:
- Spring Security默认开启的CSRF保护会拦截所有POST请求,即使
/api/**已配置permitAll,仍会校验CSRF Token,导致请求无法到达Controller - 配置规则的执行顺序或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/*。
验证步骤
- 修改配置后重启应用
- 使用Postman重新发送POST请求,检查返回内容是否为
Received: [你的请求体内容] - 若仍有问题,查看启动日志,确认TestRestController的POST端点已被正确注册(日志会显示类似
Mapped "{[/api/test/postbody],methods=[POST]}"的内容)
内容的提问来源于stack exchange,提问作者Szyu
相关产品推荐
相关产品推荐

