springboot配置跨域问题

问题:
在springboot中配置了全局cors无效
这是cors配置类

@Configuration
public class CorsConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}

下面是controller

@RestController
public class Demo {

    @RequestMapping("/hello")
    public ResponseEntity hello(@RequestParam String hello) {
        return ResponseEntity.ok(hello);
    }
}

下面是webstorm中测试的ajax请求:

    function aa() {
        $.post('localhost:8080/hello', { hello: 'dd' }, function (data) {
            console.log(data)
        })
    }

每次刷新页面执行这个方法,不管sprigboot怎么配置都会提示跨域问题
下面是跨域:

clipboard.png

求解惑 这是为什么。根据springboot官网的cors的配置但是没用。

阅读 9.6k
4 个回答

谢邀!

首先,题主贴出的错误提示是这样的:

Cross origin requests are only supported for protocol schemes: http, data, chrome, https...

很明显,这仅是提示你protocol错误而已,请用http://开头的路径(protocol采用http协议)-因为你这个看起来像是http协议头没有被补齐。

请注意,题主你测试的路径是localhost:8080/hello,可以换成http://localhost:8080/hello试试。

另外,虽然我已经很久没有写Java后台了,也没用过springboot,但是我以前整理过其它类型的跨域配置(如spring mvc框架的),参考:

ajax跨域,这应该是最全的解决方案了

最后,CORS只是一个跨域资源共享方案而已,正常来说,按照上面的文档配置,应该就行了。

补充一句,springboot的配置看起来和上文中的Node-express后台配置很像。可以自行对比对比。

请参考如下配置,添加 CorsFilter

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏