Postman发送POST请求跨域问题及健康检查正则匹配失败排查
问题1:Postman跨域错误原因及修复
你当前的跨域配置存在两处明确错误:
- 配置冲突:同时配置了全局
CorsFilter和控制器类上的@CrossOrigin注解,两套规则会出现优先级覆盖异常,优先保留全局Filter配置即可,删除控制器类上的@CrossOrigin(origins = "*", maxAge = 3600)注解。 - 规则不符合CORS规范:你在
CorsConfiguration中同时配置了setAllowCredentials(Boolean.TRUE)和addAllowedOrigin("*"),按照W3C的CORS规范,允许携带凭证(Cookie、认证头信息)时,不允许使用通配符*作为允许源,需要修改为使用allowedOriginPatterns属性:
// 替换原有的config.addAllowedOrigin("*") config.setAllowedOriginPatterns(Collections.singletonList("*"));
注:Postman本身默认不会校验跨域规则,你遇到的跨域报错大概率是你手动添加了
Origin请求头模拟浏览器跨域场景,按上述修改后即可恢复正常。
问题2:健康检查正则匹配失败原因及修复
你的正则匹配逻辑存在两处核心问题:
- 路径不匹配:你写的正则规则
^.+/abc/[\d]+\.[\d]+/?$要求请求路径必须包含/abc/+ 数字.数字的格式,但你当前的业务接口路径前缀是/gdpr/1.0,完全不符合正则匹配规则,且你配置的认证过滤器仅拦截/abc/*路径的请求,你访问/gdpr/1.0/request接口根本不会进入该过滤器,自然不会触发健康检查匹配逻辑。 - 如果你需要匹配
/gdpr/前缀的版本号路径,可将正则修改为:
private static final Pattern HEALTH_CHECK = Pattern.compile("^.+/gdpr/\\d+\\.\\d+/?$");
如果你需要匹配/abc/前缀的健康检查路径,测试时直接请求对应格式的路径即可,比如http://你的服务地址/abc/1.0。
内容的提问来源于stack exchange,提问作者arj
相关产品推荐
相关产品推荐

