部署于Azure Ubuntu的Spring Boot GET接口无法通过Ajax调用问题问询
问题根因汇总
- Ajax请求地址指向错误:你写的
http://localhost:9002是客户端地址,Ajax代码运行在访问PHP页面的用户本地浏览器中,会指向用户自己的设备端口,而非Azure服务器的端口,自然连接失败。 - Spring Boot监听配置限制:
application.properties中配置的server.address=localhost,会让Spring Boot仅监听服务器本地回环接口,就算请求指向服务器公网IP,也无法连接到服务。 - CORS配置存在逻辑错误:
- 两次对
/**路径添加CORS映射,后配置的规则会覆盖前一条,仅http://52.XXX.XXX.XXX的跨域请求会被放行 - Spring Security的访问规则中
hasIpAddress("::9002")属于无效配置,该方法用于校验客户端IP而非端口,不产生任何作用
- 两次对
- 该问题和PHP的
.htaccess配置完全无关,不需要修改对应文件。
修复步骤
调整Spring Boot监听配置
修改application.properties,删除server.address=localhost,或者改为server.address=0.0.0.0,让服务监听服务器所有网卡接口,可接收公网请求。修正CORS配置
合并重复的CORS规则,删除无效的IP校验逻辑,测试阶段可先放开权限验证,确认通了再补充权限规则:
@Override public void addCorsMappings(CorsRegistry registry) { LOG.info("Adding CORS Mapping"); // 把所有允许的源放在同一个配置里,避免覆盖 registry.addMapping("/**") .allowedOrigins("http://localhost", "http://52.XXX.XXX.XXX") // 后续如果用域名访问也要把域名加进来 .allowedMethods("PUT", "DELETE", "POST", "GET") .allowCredentials(false).maxAge(3600); } @Override protected void configure(HttpSecurity http) throws Exception { LOG.info("Configuring Security"); http.cors().and().csrf().disable() .authorizeRequests().antMatchers("/**") // 先放开权限验证,确认连通后再按需添加IP限制规则 .permitAll(); }
- 修改前端Ajax请求地址
将url替换为你的Azure服务器公网IP或对应域名,示例:
url: 'http://52.XXX.XXX.XXX:9002/universidades_por_prioridad'
同时确认Azure控制台的网络安全组已开放9002端口的入站规则,允许你需要的访问源IP连接。
额外说明
你在服务器本地执行curl命令可以正常访问,是因为curl运行在服务器本地,请求的是服务器自身的回环接口,刚好匹配你原配置的监听地址,和浏览器端Ajax的运行场景完全不同。
内容的提问来源于stack exchange,提问作者dani77
相关产品推荐
相关产品推荐

