ฉันสงสัยในสิ่งเดียวกัน ดังนั้นหลังจากการค้นคว้าเล็กน้อย ฉันพบว่าวิธีที่ง่ายที่สุดคือใช้ JAX-RS ContainerResponseFilter
เพื่อเพิ่มส่วนหัว CORS ที่เกี่ยวข้อง ด้วยวิธีนี้คุณไม่จำเป็นต้องแทนที่สแต็กบริการเว็บทั้งหมดด้วย CXF (Wildfly ใช้ CXF เป็นรูปแบบบางอย่าง แต่ดูเหมือนว่าจะใช้กับ JAX-RS อาจเป็นเพียง JAX-WS เท่านั้น)
ไม่ว่าคุณจะใช้ตัวกรองนี้หรือไม่ก็ตาม ตัวกรองจะเพิ่มส่วนหัวให้กับทุกบริการเว็บ REST
package com.yourdomain.package;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class CORSFilter implements ContainerResponseFilter {
@Override
public void filter(final ContainerRequestContext requestContext,
final ContainerResponseContext cres) throws IOException {
cres.getHeaders().add("Access-Control-Allow-Origin", "*");
cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
cres.getHeaders().add("Access-Control-Max-Age", "1209600");
}
}
จากนั้นเมื่อฉันทดสอบด้วย curl การตอบสนองก็มีส่วนหัว CORS:
$ curl -D - "http://localhost:8080/rest/test"
HTTP/1.1 200 OK
X-Powered-By: Undertow 1
Access-Control-Allow-Headers: origin, content-type, accept, authorization
Server: Wildfly 8
Date: Tue, 13 May 2014 12:30:00 GMT
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Transfer-Encoding: chunked
Content-Type: application/json
Access-Control-Max-Age: 1209600
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
ความเข้าใจของฉันคือมันเป็นคำอธิบายประกอบ @Provider
ที่บอกให้รันไทม์ JAX-RS ใช้ตัวกรอง หากไม่มีคำอธิบายประกอบก็ไม่มีอะไรเกิดขึ้น
ฉันมีแนวคิดเกี่ยวกับการใช้ ContainerResponseFilter
จาก ตัวอย่างเสื้อแข่ง
person
Joel Pearson
schedule
13.05.2014