2017-02-16 2 views
0

Ich habe eine einfache javax.filter.Filter Implementierung, die angeblich CORS-Header zu einem HttpResponse hinzuzufügen:`javax.filter.Filter` nicht Hinzufügen von CORS-Header richtig

log.debug("Headers before adding: {}", response.getHeaderNames()); 
    log.debug("Adding CORS headers to {}", response.getClass().getName()); 
    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS"); 
    log.debug("Headers after adding: {}", response.getHeaderNames()); 

Aber manchmal die Header enden nicht nach oben in die Antwort (sowohl nach der empfangenden Partei und dieses Bit von log):

DEBUG Headers before adding: [Cache-Control] 
DEBUG Adding CORS headers to org.apache.catalina.connector.ResponseFacade 
DEBUG Headers after adding: [Cache-Control] 

und sie manchmal:

DEBUG Headers before adding: [] 
DEBUG Adding CORS headers to org.apache.catalina.connector.ResponseFacade 
DEBUG Headers after adding: [Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers] 

Was mache ich falsch?

Antwort

0

Das Problem war, dass, wenn Sie chain.doFilter(req, res) vor dem Setzen der Header aufrufen, Tomcat/Jetty beginnt, die Antwort zu schreiben und kann keine Header mehr hinzufügen. Leider gibt Ihnen keiner der Server eine Fehlermeldung oder Ausnahme, um dies anzuzeigen.

Lösung: Setzen Sie die Header immer vor dem Aufruf chain.doFilter(req, res)

Verwandte Themen