2016-01-27 36 views
6

Tôi gặp vấn đề với CORS trong khởi động mùa xuân. Tôi đã định cấu hình CORS như thế nàyKhởi động mùa xuân và CORS

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addCorsMappings(CorsRegistry registry) { 
     registry.addMapping("/**"); 
    } 
} 

mà tôi cho phép cho phép tất cả tiêu đề và nội dung khác.

Nó hoạt động xuất sắc với yêu cầu GET

$.get("someUrl, function(data, status){ 
    console.log(data[0].latitude); 
}); 

Nhưng bất cứ khi nào tôi thực hiện yêu cầu POST như thế này

$.ajax({ 
     url: 'someUrl', 
     type: 'post', 
     dataType: 'json', 
     crossDomain: true, 
     contentType: "application/json; charset=utf-8", 
     success: function (data) { 
      console.log(data); 
     }, 
     data: object 
    }); 

tôi nhận được sau

OPTIONS XHR "someUrl" [HTTP/1.1 403 Forbidden 4ms] 
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at "someUrl". 
(Reason: CORS header 'Access-Control-Allow-Origin' missing). 

Làm thế nào tôi có thể giải quyết vấn đề này?

+0

Dù nó là gây ra vấn đề, tôi không nghĩ rằng đó là trong các đoạn bạn đã đăng trong câu hỏi. Tôi chỉ thử nó trên một khởi động mùa xuân tươi (1.3.2.) Thiết lập với một số tiền tối thiểu của mã và các tiêu đề CORS được thêm chính xác khi tôi 'POST' từ các lĩnh vực khác. Bạn đang sử dụng phiên bản Boot nào và từ tác nhân người dùng nào bạn 'POST' yêu cầu của bạn? Có thể phụ thuộc khác trong dự án của bạn ghi đè lên các thiết lập Cors của bạn (hoặc có thể cấu hình rõ ràng hơn trên bộ điều khiển?)? – sthzg

+0

Tôi sử dụng Spring Boot 1.3.0.RELEASE và tác nhân người dùng là Firefox. Trên thực tế nó là ứng dụng Api-gateway chuyển hướng đến các thiết bị đầu cuối khác của các ứng dụng khởi động mùa xuân khác. Tôi sử dụng Zuul từ netflix. – nurgasemetey

Trả lời

15

Cách đơn giản của cấu hình CORS bộ lọc với ứng dụng lò xo khởi động là làm cho @Component lớp mà thực hiện Lọc như thế này:

@Component 
public class SimpleCORSFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
     response.setHeader("Access-Control-Expose-Headers", "Location"); 
     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) {} 

    @Override 
    public void destroy() {} 

} 

Nó hoạt động tốt với spring- khởi động 1.3.0

EDIT:

vẫn còn, làm việc với mùa xuân-boot 1.5.8

+0

lớp này không hoạt động – Bleser

+0

Nếu bạn đang sử dụng xác thực cơ bản http, đừng quên thêm mã thông báo 'Ủy quyền' trong' Access-Control-Allow-Headers'. –

+2

'Bộ lọc' đang được triển khai ở đây là' javax.servlet.Filter' – Tadhg

Các vấn đề liên quan