SpringMVC 解决CrossOrigin问题

对于SpringBoot,在jdk1.8下可使用注解完成,较为简单,而且细粒度也比较客观:

 @RequestMapping("/saveXYZPoints")
    @ResponseBody
    @CrossOrigin
    public String saveXYZPoints(@RequestBody List<XYZ> list){
        xyzService.save(list);
        return "Success";
    }

过程中有以下问题未解决:
1.为何在jdk1.7下,该注解会报错,目前还未明了,如果有热心网友知道 ,可以在评论里回复:

Error:(37, 5) java: 对于属性<clinit>, 注释org.springframework.web.bind.annotation.CrossOrigin缺少值

官方参考文章:
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/CrossOrigin.html
https://stackoverflow.com/questions/33925205/crossorigin-annotation-stops-compilation-in-intellij 这篇文章里也提到,最好结论说这是个bug ┭┮﹏┭┮ 解决的方法就是升级到最新的版本jdk

为了在jdk1.7也能运行可以考虑这种方式:

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

也可以选择更精确的控制:

//代码摘自网络,只为说明配置更加精确,更加细粒度
@Configuration
public class CORSConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
//              registry.addMapping("/api/**");
                registry.addMapping("/**")
                        .allowedOrigins("http://domain.com", "http://domain2.com")
                        .allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
                        .allowCredentials(false).maxAge(3600);
            }
        };
    }
}

备忘与:2018年4月18日18:35:42

猜你喜欢

转载自blog.csdn.net/chenbinkria/article/details/79994405