局域网其他设备访问Angular应用报错误0,仅宿主设备正常如何解决?
问题解决方法
你当前的Spring Boot CORS配置仅将固定的几个前端访问源加入了允许列表,局域网内其他不在列表内的设备发起请求时,会被跨域规则拦截,因此只能加载前端静态资源、无法获取后端接口数据。
场景1:本地调试阶段使用(不建议生产环境配置)
直接允许所有跨域请求,替换原有CORS配置代码即可:
@Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowCredentials(true); // 允许所有访问源 corsConfiguration.addAllowedOriginPattern("*"); corsConfiguration.setAllowedHeaders(Arrays.asList("Origin", "Access-Control-Allow-Origin", "Content-Type", "Accept", "Jwt-Token", "Authorization", "Origin, Accept", "X-Requested-With", "Access-Control-Request-Method", "Access-Control-Request-Headers")); corsConfiguration.setExposedHeaders(Arrays.asList("Origin", "Content-Type", "Accept", "Jwt-Token", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Credentials", "Filename")); corsConfiguration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); }
注意:开启setAllowCredentials(true)的前提下,不能直接使用setAllowedOrigins("*"),必须用addAllowedOriginPattern("*")配置才会生效。
场景2:生产环境使用
如果需要限制访问源保证安全,可以将你局域网段所有可能的前端访问源,按http://IP:端口的格式枚举添加到allowedOrigins列表中;如果同网段设备较多,也可以添加网段通配规则比如http://192.168.0.*:80到允许列表。
额外排查项
如果修改CORS配置后依然无法访问,检查Spring Boot服务启动时是否绑定了127.0.0.1,需要修改启动配置将服务绑定到0.0.0.0,保证局域网内设备可以正常访问到后端端口。
内容的提问来源于stack exchange,提问作者Fitim
相关产品推荐
相关产品推荐

