Yo tenía un sitio web estático organizado por Tomcat.

Cómo establecer una cabecera de mi sitio como:Access-Control-Allow-Origin: *

Están todos los archivos estáticos, no cualquier servlet aplicación.

InformationsquelleAutor Dozer | 2013-04-30

3 Comentarios

  1. 64

    Si se trata de un sitio estático, a continuación, comenzando con Tomcat 7.0.41, usted puede fácilmente controlar CORS comportamiento a través de un filtro incorporado.

    Casi la única cosa que usted tiene que hacer es editar el mundial web.xml en CATALINA_HOME/conf y agregar la definición de filtro:

     <!-- ================== Construido En Definiciones de Filtro ===================== --> 
    
    ... 
    
    <filtro> 
    <filter-name>CorsFilter</filter-name> 
    <filtro de clase>org.apache.catalina.los filtros.CorsFilter</filter-class> 
    </filtro> 
    <filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    
    <!-- ==================== Construido En Filtro de Asignaciones ====================== --> 
    
    

    Ser consciente de que, a pesar de que Firefox no como Access-Control-Allow-Origin: * y las solicitudes de credenciales (cookies): a la hora de responder a una solicitud de credenciales de servidor, debe especificar un dominio, y no se puede utilizar comodines.

    • Cuando uno depura los que, por favor, ser conscientes de que CORS encabezados sólo se envía si hay una solicitud de origen cruzado. Consulte tomcat.apache.org/tomcat-8.0-doc/images/cors-flowchart.png. Así que por favor no sólo de inspeccionar llamadas al azar (usando el Violinista, pestaña red, …), pero realmente el CORS solicitudes de sí mismos.
    • Después de la adición de un filtro yo todavía estoy recibiendo la Respuesta a la comprobación previa petición de no pasar el control de acceso de verificación: No ‘Access-Control-Allow-Origin’ encabezado presente en el recurso solicitado. Origen ‘localhost:8080‘ es, por tanto, no se permite el acceso. La respuesta ha de código de estado HTTP 403. También mi método que en realidad es un GET se ha convertido en la OPCIÓN y devuelve 403
    • No es este bonito sitio que te permite enviar CORS solicitudes, si quieres probar algo.
    • Nota t sombrero esta realidad no agregar el encabezado, a menos que también se establece cors.permitido.orígenes. Otros parámetros utilizables por defecto, pero usted definitivamente necesidad de establecer este así. (En realidad, no es trabajo para mí, pero los documentos son muy claras en este así que tal vez esto podría ayudar a alguien…)
    • se que esto no funciona si tenemos el filtro en la aplicación web.xml?
    • No probé, pero lo dudo, ya que es un parámetro que influye más que una aplicación desplegada en el tomcat
    • gracias por el enlace test-cors.org, que me dio el código que necesitaba – eres un héroe!

  2. 12

    Aquí es muy básico filtro que va a agregar el CORS encabezados. Tenga en cuenta que por defecto, esto permitirá a todos los dominios y los métodos, de modo que usted debe personalizar para que se ajuste a sus necesidades.

    También debe ser el primer filtro en su web.xml.

    package com.conductiv.api.listener;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class CORSFilter implements Filter {
        public void destroy() {
        }
        public static String VALID_METHODS = "DELETE, HEAD, GET, OPTIONS, POST, PUT";
    
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            HttpServletRequest httpReq = (HttpServletRequest) req;
            HttpServletResponse httpResp = (HttpServletResponse) resp;
    
            //No Origin header present means this is not a cross-domain request
            String origin = httpReq.getHeader("Origin");
             if (origin == null) {
                //Return standard response if OPTIONS request w/o Origin header
               if ("OPTIONS".equalsIgnoreCase(httpReq.getMethod())) {
                    httpResp.setHeader("Allow", VALID_METHODS);
                    httpResp.setStatus(200);
                    return;
                }
            } else {
                //This is a cross-domain request, add headers allowing access
                httpResp.setHeader("Access-Control-Allow-Origin", origin);
                httpResp.setHeader("Access-Control-Allow-Methods", VALID_METHODS);
    
                String headers = httpReq.getHeader("Access-Control-Request-Headers");
                if (headers != null)
                    httpResp.setHeader("Access-Control-Allow-Headers", headers);
    
                //Allow caching cross-domain permission
                httpResp.setHeader("Access-Control-Max-Age", "3600");
            }
            //Pass request down the chain, except for OPTIONS
            if (!"OPTIONS".equalsIgnoreCase(httpReq.getMethod())) {
                chain.doFilter(req, resp);
            }
     }
    
        public void init(FilterConfig config) throws ServletException {
    
        }
    
    }
    
    • cómo utilizar esta clase?. Tengo que agregar mi @método Post en esta clase «CORSFilter»
    • Crear esta clase en su aplicación. Luego agregar esta ruta de clase en su aplicación web.xml donde la clase <filtro> <filter-name>header</filter-name> <filtro de clase>……….</filter-class> </filtro> <filter-mapping> <filter-name>header</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
    • Es la adición de los encabezados suficiente para que el CORS solicitud para ser controlados? No hay real de la lógica necesaria?
  3. 3

    Necesita agregar un Filtro agregar el encabezado y configurarlo para que todos los caminos

    <filter>
      <filter-name>header</filter-name>
      <filter-class>...</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>header</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    • sólo fue un sitio web estático, debo usar un servlet?
    • Sí, usted puede agregar un encabezado sin un Servlet o Filter en Tomcat
    • Considere el uso de contenedor de filtros para la mayoría de los casos de uso más comunes.
    • No creo tomcat proporciona filtros para agregar encabezados personalizados

Dejar respuesta

Please enter your comment!
Please enter your name here