Spring MVC 解决CORS跨域问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/totally123/article/details/80307414

4.2之后,Spring Framework可以解决跨域问题,开箱即用,下面是从官方文档总结了3种解决办法。

  • 利用@CrossOrigin注解,作用在Controller的方法上,可以指定originsallowedHeadersexposedHeadersallowCredentialsmaxAge属性。优点是可以指定某个或者某些接口跨域访问,缺点则是若需要全局支持跨域访问,则每个接口都需要加注解。示例如下:
@CrossOrigin(origins = {"http://spring-framework.yjy.com"}, maxAge = 3600)
@RequestMapping(value = "/api1")
public ModelAndView api1() {
    return generateOkResponse();
}
  • 在MVC配置文件配置mvc:cors标签:支持多个mvc:mapping标签,通过mvc:mapping标签的path属性可以指定需要支持跨域访问的路径,这样既可以单独指定也可以全局指定。示例如下:
<mvc:cors>
    <mvc:mapping path="/cors/api2"
                 allowed-origins="http://spring-framework.yjy.com"
                 allowed-methods="GET,POST,PUT,POST"
                 max-age="3600" />
</mvc:cors>
  • Filter级的拦截:继承CorsFilter,注入自定义的CorsConfigurationSource,CorsConfigurationSource有一个Map类型的corsConfigurations成员变量,用来维护path(跨域访问路径)和CorsConfiguration(跨域访问配置)的关系。示例如下:
public class MyCorsFilter extends CorsFilter {

    public MyCorsFilter() {
        super(configurationSource());
    }

    private static UrlBasedCorsConfigurationSource configurationSource() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://spring-framework.yjy.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/cors/api3", config);

        return source;
    }
}

猜你喜欢

转载自blog.csdn.net/totally123/article/details/80307414