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

Spring Boot中/v1路径CORS错误及404异常排查求助

问题分析与解决方案

先拆解你的两个核心问题,结合错误日志和配置逐一分析:


问题1:根路径/v1/的CORS错误

从你更新的错误信息Redirect is not allowed for a preflight request可以明确原因:
当浏览器访问http://192.168.0.3/v1/时,Spring Boot默认会对末尾带斜杠的路径做重定向(比如把/v1/重定向到/v1),但CORS的预检OPTIONS请求是不允许被重定向的,浏览器因此拦截了响应。
而/v1/signup能正常访问,是因为这个路径有明确的Controller映射,不会触发重定向,预检请求能被正常处理。

解决方案

方案A:禁用末尾斜杠重定向

在application.properties/application.yml中添加配置,关闭Spring Boot的自动重定向行为:

# Spring Boot 2.6+适用,指定路径匹配策略
spring.mvc.pathmatch.matching-strategy=PATH_PATTERN_PARSER
# 禁用末尾斜杠重定向
spring.mvc.redirect-to-non-slash=false

方案B:给根路径添加Controller映射

创建一个控制器处理/v1和/v1/的请求,避免触发重定向:

@RestController
@RequestMapping("/v1")
public class RootApiController {
    // 同时匹配带斜杠和不带斜杠的根路径
    @GetMapping(value = {"", "/"})
    public ResponseEntity<String> getApiStatus() {
        return ResponseEntity.ok("V1 API is running");
    }
}

问题2:Postman访问根路径的404/401异常

这个问题和重定向直接相关:

  • 凭证错误时:Spring Security的HttpBasic认证会直接拦截请求返回401,不会走到DispatcherServlet找控制器的步骤,所以不会出现404。
  • 凭证正确时:认证通过后,DispatcherServlet找不到GET /v1/的控制器映射,返回404;而你说发送POST却显示GET,是因为重定向会自动把POST请求转为GET请求,导致日志显示异常。

解决这个问题只需要执行上面的方案A或B即可,根路径有了正确的映射后,无论凭证是否正确,都会按照预期返回结果。


额外的CORS配置隐患

你的CorsConfig中有一个不符合浏览器规范的配置:当设置config.setAllowCredentials(true);时,config.addAllowedOrigin("*");是无效的——浏览器不允许同时开启凭证支持和通配符域名。你需要把允许的源改为前端实际的域名:

@Configuration
public class CorsConfig {
    @Bean
    public FilterRegistrationBean<Filter> customCorsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 替换为你的前端实际域名,比如你的localhost:3007
        config.addAllowedOrigin("http://localhost:3007");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        // 缓存预检请求结果,减少OPTIONS请求次数
        config.setMaxAge(3600L);
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
}

最终验证步骤

  1. 先修复CORS的域名配置,替换为前端实际地址。
  2. 选择方案A或B解决根路径重定向问题。
  3. 测试浏览器访问/v1:此时预检请求不会被重定向,CORS错误消失;认证通过后会返回控制器的响应,认证失败返回401。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:49:02