Yêu cầu Jersey của tôi CORS không hoạt động đối với POST, nhưng hoạt động cho các yêu cầu GET. Các tiêu đề đang được ánh xạ tới các yêu cầu Jersey như được hiển thị trong ảnh chụp màn hình dưới đây của yêu cầu GET đến cùng một tài nguyên.Jersey CORS hoạt động cho GET nhưng không POST
Tuy nhiên, làm một POST để các phương pháp dưới đây khiến tôi kết thúc với XMLHttpRequest cannot load http://production.local/api/workstation. Origin http://workstation.local:81 is not allowed by Access-Control-Allow-Origin.
Dưới đây là một ảnh chụp màn hình của hoạt động mạng:
Chi tiết về yêu cầu POST thất bại:
Đây là tài nguyên của tôi:
@Path("/workstation")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class WorkstationResource {
@InjectParam
WorkstationService workstationService;
@POST
public WorkstationEntity save (WorkstationEntity workstationEntity) {
workstationService.save(workstationEntity);
return workstationEntity;
}
@GET
@Path("/getAllActive")
public Collection<WorkflowEntity> getActive() {
List<WorkflowEntity> workflowEntities = new ArrayList<WorkflowEntity>();
for(Workflow workflow : Production.getWorkflowList()) {
workflowEntities.add(workflow.getEntity());
}
return workflowEntities;
}
}
CORS My lọc:
public class ResponseCorsFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
Response.ResponseBuilder responseBuilder = Response.fromResponse(response.getResponse());
responseBuilder
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD");
String reqHead = request.getHeaderValue("Access-Control-Request-Headers");
if(null != reqHead && !reqHead.equals(null)){
responseBuilder.header("Access-Control-Allow-Headers", reqHead);
}
response.setResponse(responseBuilder.build());
return response;
}
}
cấu hình
My Jersey trong lớp học chính của tôi:
//add jersey servlet support
ServletRegistration jerseyServletRegistration = ctx.addServlet("JerseyServlet", new SpringServlet());
jerseyServletRegistration.setInitParameter("com.sun.jersey.config.property.packages", "com.production.resource");
jerseyServletRegistration.setInitParameter("com.sun.jersey.spi.container.ContainerResponseFilters", "com.production.resource.ResponseCorsFilter");
jerseyServletRegistration.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", Boolean.TRUE.toString());
jerseyServletRegistration.setInitParameter("com.sun.jersey.config.feature.DisableWADL", Boolean.TRUE.toString());
jerseyServletRegistration.setLoadOnStartup(1);
jerseyServletRegistration.addMapping("/api/*");
Chính sách gốc tương tự? –
@SotiriosDelimanolis - Có, và tôi đã cho phép xuất xứ chéo. Điều đó có nên cho phép chức năng này hoạt động chính xác không? – Webnet
Không biết đủ về môi trường, chỉ cần chỉ ra những điều bạn nghĩ đến. Có thể bạn đã bỏ lỡ điều gì đó. –