Java-filter versagt zu setzen-Antwort-Header

Ich versuche zu erstellen, die ein Java - "Filter", erkennt eine benutzerdefinierte HTTP-Anforderungs-Header und fügt response-Headern, so dass die Datei wird automatisch heruntergeladen werden. Der response-header ist sehr wichtig für diese ist der "Content-Type = Attachment" - header der Antwort. Ich habe erstellt eine HTTP-request-Objekt, fügt die benutzerdefinierten Header:

function myHttpObject(filePath){
function makeHttpObject() {
    return new XMLHttpRequest();
}

var request = makeHttpObject();

request.open("GET", filePath, false);
request.setRequestHeader("X-Wria-Download", "PDFdownload");
request.send(null);
window.open(filePath);
console.log(request.getAllResponseHeaders());
}

Diese fügt den X-Wria-Download-header in die Anfrage.
Dann habe ich ein Java-Filter, die sucht, die request-header und der Antwort-header "Content-Type=" Anlage

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Contenttypefilter implements Filter  {

protected FilterConfig filterConfig;

public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
}

public void destroy() {
    //noop
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;

    //get the headers we placed in the request
    //based on those request headers, set some response headers

    if(req.getHeader("X-Wria-Download") != null){
        res.setHeader("Content-Type", "application/pdf");
        res.setHeader("Content-Disposition", "attachment; filename=success.pdf");
    }

    chain.doFilter(req,res);
}


}

Und dann natürlich die web.xml hat den code zum einbinden der Filter auf alle jsp-Dateien.

Ist die Sache, die verwirren mich, ist, dass der header wird auf die Antwort-Datei, aber es ist nicht das herunterladen, wie es sollte. Wenn ich die res.setHeader("Content-Disposition", "attachment; filename=Erfolg.pdf"); Zeile außerhalb der "if" - Anweisung, dann wird es funktionieren, aber es gilt das download-Verhalten für alle JSP ' s, die ich nicht will.

Warum ist es für die Anwendung der content-disposition aber nicht funktioniert, wenn ich die res.setHeader in der if-Anweisung; und dann arbeiten, wenn es außerhalb der if-Anweisung? Irgendwelche Ideen, wie kann ich das gewünschte Verhalten (nur Anwendung von content-disposition-zu jsp ' s, ich habe eine benutzerdefinierte request-header)?

  • Sind Sie sicher, dass X-Wria-Download wird korrekt empfangen in Java? Können Sie versuchen, zu drucken, req.getHeader("X-Wria-Download") und sehen, ob es tatsächlich richtig angekommen ist in der Java-filter?
  • Ja, es ist, es zu empfangen richtig. In der obigen "if" - Anweisung: if(req.getHeader("X-Wria-Download") != null){} geht es in die Aussage und wenn ich in ein System.aus.println es wird gedruckt, die Zeile aus. Ich gilt auch für die "Content-Disposition", um die Datei, sondern den Content-Type scheint überschrieben, an der Kette.Filterstufe. Auch wenn die Antwort bekommt die "Content-Disposition", es scheint sich nicht zu Verhalten, als wenn Sie es getan hat (nicht heruntergeladen, sondern zieht sich die pdf als eine Seite.) Ich sehe auch die "X-Wria-Download" in den request-header bei der Verwendung von Chrome developer tools.
  • Seltsam, wenn: res.setHeader("Content-Type", "application/pdf"); res.setHeader("Content-Disposition", "attachment; filename=Erfolg.pdf"); put ist außerhalb der if-Anweisung, dann wird der filter arbeiten. Dies löst nicht mein problem aber da ich nur wollen, dass der filter angewendet servlets, die ich angehängt habe mein custom-header.
  • Hinzugefügt eine Antwort mit meinen Kommentaren über, die.
InformationsquelleAutor Sol Slay | 2012-11-19
Schreibe einen Kommentar