2013-04-18 25 views
6

Tôi cần triển khai hỗ trợ CORS trong máy chủ REST dựa trên Jersey. Tôi đã xem một số thông tin có sẵn material và thông tin tutorials. tôi thấy hai cách tiếp cận người đang sử dụng:Triển khai thực hiện phía máy chủ Java CORS

Approach-1:

đơn giản và trực tiếp tiếp cận nơi thực hiện một HTTP lọc mà thêm CORS tiêu đề để phản ứng (Jersey cụ thể)

public class ResponseCorsFilter implements ContainerResponseFilter { 

public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) { 

     ResponseBuilder resp = Response.fromResponse(contResp.getResponse()); 
     resp.header("Access-Control-Allow-Origin", "*") 
       .header("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); 

     String reqHead = req.getHeaderValue("Access-Control-Request-Headers"); 

     if(null != reqHead && !reqHead.equals(null)){ 
      resp.header("Access-Control-Allow-Headers", reqHead); 
     } 

     contResp.setResponse(resp.build()); 
      return contResp; 
    } 
} 

Phương pháp tiếp cận-2:

Thực hiện đầy đủ CORS theo đặc điểm kỹ thuật của nó, tức là xử lý yêu cầu preflight và hỗ trợ tất cả tiêu đề. Mã nguồn được kiểm tra của một triển khai java nguồn mở như vậy cors-filter

Câu hỏi của tôi là phương pháp nào nên được thực hiện khi nào? Điều gì có thể là nhược điểm của phương pháp tiếp cận-1 so với phương pháp tiếp cận-2?

Trường hợp sử dụng của tôi là tất cả các nguồn gốc/phương pháp có thể được cho phép và Authorization tiêu đề HTTP sẽ là một phần của tất cả các yêu cầu REST. Tôi nghiêng về phía cách tiếp cận-1 vì dường như hầu hết các thiết lập mặc định của CORS sẽ đủ cho trường hợp sử dụng của tôi nhưng không chắc nếu không có đầy đủ các thông số CORS được triển khai ở phía máy chủ sẽ tạo ra bất kỳ vấn đề gì.

Trả lời

1

Vì mục đích của bạn, cách tiếp cận # 1 nghe đủ. Phương pháp tiếp cận số 2 là nhiều hơn đối với trường hợp bạn có các phản hồi khác nhau dựa trên loại yêu cầu hoặc bạn muốn xác thực thông tin yêu cầu. Nếu phản hồi của bạn giống nhau trên tất cả các loại yêu cầu, thì # 1 sẽ ổn. Lưu ý rằng vì việc triển khai của bạn về cơ bản cho phép tất cả các yêu cầu thành công, bạn nên thực hiện các kiểm tra của riêng mình để đảm bảo yêu cầu hợp lệ. Vì bạn đang cho phép tiêu đề Cấp quyền, tôi giả sử bạn biết điều này và đang xác thực mã thông báo ủy quyền?

+0

nhờ trả lời của bạn, có mỗi yêu cầu có nghĩa vụ phải được gắn với một mã thông báo nào được lưu giữ trong Authorization tiêu đề mà máy chủ trên nhận xác nhận trước khi thực hiện bất kỳ chế biến. – harsh