使用Spring Boot 1.3.3-RELEASE启用CORS

时间:2016-03-11 03:11:53

标签: java spring spring-mvc spring-boot cors

我尝试使用Spring Boot 1.3.3在示例项目中启用CORS

我尝试按照此link的所有说明操作,但我仍然无法看到结果。

在我的Application.java中,我有以下代码。

   $.each(tracking, function(i,tracking){
       $parcel.append(
       '<ul>'+
       '<li>Carrier: '+ tracking.carrier + '</li>'+
       '<li> Tracking Number:' + tracking.tracking_num +'</li>'+
       '</ul>'
          );

   })

当我使用@SpringBootApplication public class Application { private static final String[] REQUEST_METHOD_SUPPORTED = { "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD" }; public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/rest/**").allowedOrigins("*").allowedHeaders("*").allowedMethods(REQUEST_METHOD_SUPPORTED); } }; } } GET时,一切正常,但当我尝试使用POSTPUTDELETEOPTIONS时。此外,我尝试添加此属性PATCH,但仍然无法使其正常工作

我收到以下错误:

spring.mvc.dispatch-options-request:true

成功完成请求

你们有个想法我该如何解决这个问题?您是否有一个教程,我可以使用Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'OPTIONS' not supported Invoking @ExceptionHandler method: public final org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException(java.lang.Exception,org.springframework.web.context.request.WebRequest) Request method 'OPTIONS' not supported Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling PUT查看使用CORS的示例?

---更新---

这是我的控制器

PATCH

}

我是否需要手动创建OPTIONS方法?我的控制器中没有处理OPTIONS请求的方法

1 个答案:

答案 0 :(得分:0)

感谢您的回答和评论。

最后,答案必须与这里发布的答案相结合;我们被一个没有发送内容类型的客户端消费,所以我们在尝试在PATCH或PUT之前做一个OPTIONS时得到403;在其余客户端发送内容类型后,我们能够处理该请求。

因此,在我的情况下,如果请求包含内容类型并且您不需要进行任何解决,则以下代码可以正常工作。

 @Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/api/rest/**").allowedOrigins("*").allowedHeaders("*").allowedMethods(REQUEST_METHOD_SUPPORTED);
        }
    };
}

但是,如果有人要求在没有内容类型的情况下允许请求OPTIONS,则需要使用此Simple CORS Filter中提到的简单过滤器并更改以下行:

response.setHeader("Access-Control-Allow-Headers", "");

我希望这可以在将来帮助某人。