Moje żądanie dla domeny Jersey nie działa dla POST, ale działa dla żądań GET. Nagłówki są mapowane do żądań Jersey, jak pokazano na poniższym zrzucie ekranu żądania GET do tego samego zasobu.Jersey CORS działa na żądanie GET, ale nie POST
jednak robi POST do poniższej metody sprawia mi skończyć z XMLHttpRequest cannot load http://production.local/api/workstation. Origin http://workstation.local:81 is not allowed by Access-Control-Allow-Origin.
Oto zrzut ekranu z aktywności sieciowej:
Szczegóły dotyczące nieudanej żądania POST:
Oto mój zasób:
@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;
}
}
Mój filtr CORS:
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;
}
}
konfiguracja
My Jersey w moich głównych zajęć:
//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/*");
Zasady dotyczące tego samego pochodzenia? –
@SotiriosDelimanolis - Tak, i pozwoliłem na krzyżowe pochodzenie. Czy nie powinno to pozwolić na prawidłowe funkcjonowanie? – Webnet
Nie wiem wystarczająco dużo o środowisku, tylko wskazując na rzeczy, które przychodzą na myśl. Może coś przeoczyłeś. –