wake-up-neo.net

Tomcat CORS-Filter

Ich möchte den Tomcat CORS-Filter aktivieren. Ich habe dies zu web.xml hinzugefügt:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.Apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Aber es funktioniert nicht ... Ich habe es mit einem benutzerdefinierten Filter versucht:

<filter>
    <filter-name>SimpleCORSFilter</filter-name>
    <filter-class>com.common.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SimpleCORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Mit dieser Klasse:

public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }
}

Und das funktioniert gut, können Sie mir sagen, warum? Ich weiß nicht, ob es wichtig ist, aber ich benutze Spring Framework.

24
Tobia

Der Filter org.Apache.catalina.filters.CorsFilter sucht zuerst einen Header in der Anforderung: Origin. Wenn dieser Header nicht vorhanden ist, fügt der Filter der Antwort keinen Header hinzu. Vielleicht funktioniert aus diesem Grund nicht.

Suchen Sie außerdem in einer POST-Anforderung nach dem Header Content-Type. Ähnliches passiert bei anderen Methoden. Vielleicht möchten Sie den code dieses Filters sehen. Auf andere Weise gibt es ein Flussdiagramm :

CORS Flow Chart

39
Paul Vargas

Ich habe ein ähnliches Problem und habe etwas gefunden, das bei Tomcat funktioniert. Doc Tomcat-doc-CORSFilter Ich verwende filter und init-param wie folgt:

<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>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Ich hoffe es hilft!

17
Krizka

In meinem Fall mit Ueditor , sollte der X-Requested-WithX_Requested_With sein.

0
胡凯旋