La mia richiesta di jersey CORS non funziona per il POST, ma funziona per richieste GET. Le intestazioni vengono mappate alle richieste di Jersey come mostrato nello screenshot sottostante di una richiesta GET alla stessa risorsa.Jersey CORS che lavora per GET ma non POST
Tuttavia, facendo un POST per il metodo seguito mi fa finire con XMLHttpRequest cannot load http://production.local/api/workstation. Origin http://workstation.local:81 is not allowed by Access-Control-Allow-Origin.
Ecco uno screenshot di attività di rete:
Dettagli su richiesta POST fallito:
Ecco la mia risorsa:
@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;
}
}
mio filtro 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;
}
}
configurazione
mia maglia nella mia classe principale:
//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/*");
Stessa politica di origine? –
@SotiriosDelimanolis - Sì, e ho permesso l'origine incrociata. Non dovrebbe consentire a questo di funzionare correttamente? – Webnet
Non so abbastanza sull'ambiente, sottolineando solo le cose che ti vengono in mente. Forse ti sei perso qualcosa. –