2016-05-05 6 views
0

Tomcat 8 (auf einem w2k12-Server) ignoriert aus irgendeinem Grund meine CORS-Filtereinstellungen auf tomcat8/conf/web.xml wie folgt nach den Apache Tomcat 8 docs:Tomcat 8 ignoriert CORS-Filter (web.xml, In-Code usw.)

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
     <param-name>cors.allowed.origins</param-name> 
     <param-value>*</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Es funktioniert mit GET-Anfragen, aber wenn ich versuche, eine POST zu tun, erhalte ich die 403 Forbidden Fehler sagen:

Origin http://webapp.mycompany.com is not allowed by Access-Control-Allow-Origin. 

Wo http://webapp.mycompany.com ist Hosting-Provider meines Unternehmens mit Standard-Features, die Sie mit einem Shared Hosting mit cpanel erhalten, mein Front-End ist da und es sendet die Anfragen an eine andere Domain, wo ich den Tomcat 8 Server installiert habe und die webapp WAR, die eine Jersey-basierte REST API ist.

Jetzt, nach den Vorgaben in den offiziellen Dokumenten von Apache, ist die Konfiguration, die ich verwende, das Minimum, das für das Funktionieren benötigt wird.

Ich habe dann versucht, die Filter zu bewegen, anstatt auf die web.xml der Anwendung, kein Glück, haben versucht, mehr Konfigurationen wie Methoden erlaubt das Hinzufügen, versucht in den Antworten auf die Header hinzugefügt diese direkt wie:

Response.status(Response.Status.OK) 
     .entity(relaciona) 
     .header("Access-Control-Allow-Origin", "*") 
     .header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD") 
     .header("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept") 
     .header("Access-Control-Max-Age", "1728000") 
     .build(); 

nicht Arbeit.

Jede Hilfe auf diesem würde, sehr zu schätzen, und versuchte, nur um zu bestätigen, die folgenden:

  • versucht, sowohl die Konfiguration in der Server-Einstellung und die web.xml Webapp Dateien einzeln, kein Glück
  • Versucht, die Header zu jeder Antwort in der Jersey REST Api, kein Glück
  • Die Anfragen an die API sind mit einem HTML5-Frontend mit Bootstrap und jQuery getan, versucht, die crossDomain: true zu den Ajax-Anfragen, keinen Unterschied.
  • den Ursprung Domäne in die xml in Web- und Server-web.xml-Dateien (getestet einzeln) hinzugefügt und weder gearbeitet

Dank!

+0

hallo Adrian E. Labastida Cañizares, haben Sie @ option Funktion implementiert, um POST in Ihrer Antwort auszuführen. Können Sie die detaillierten Informationen zum Antwortnetzwerk (Statuscode, Nachricht ....) abrufen, um Ihnen zu helfen? – jeorfevre

+0

Der Antwortcode, den ich bekomme, wenn ich POST mache, ist 403 verboten, und die Nachricht ist auch dort, wo Origin http://webapp.mycompany.com von Access-Control-Allow-Origin nicht erlaubt ist, was die @Option-Funktion betrifft Versuch das? Danke –

+0

hast du einen Versuch zu @Option (Antwort unten)? – jeorfevre

Antwort

0

Sobald Sie einen POST mit crossdomain abfragen, müssen Sie @OPTION für @POST/@ PUT/@DELETE-Abfragen definieren.

Haben Sie die @Option-Klasse definiert, um Ihre @ Post zu definieren?

hier ist ein Beispiel dafür, wie dies zu tun:

@OPTIONS 
@Compress 
@Path("/mypost") 
@Consumes({ MediaType.MULTIPART_FORM_DATA }) 
@Produces({ MediaType.APPLICATION_JSON }) 
public Response mypost_opts() { 
    return Response.ok().build(); 
} 



@POST 
@Compress 
@Path("/mypost") 
@Consumes({ MediaType.MULTIPART_FORM_DATA }) 
@Produces({ MediaType.APPLICATION_JSON }) 
public Response mypost() { 
    return Response.ok().build(); 
} 
+0

Ich hatte diese @OPTIONS Annotation und Code dafür nicht, ich werde es versuchen, danke! –

Verwandte Themen