2012-09-12 30 views
23

Quiero establecer una cabecera HTTP predeterminado en mi contenedor Tomcat -Access-Control-Allow-Origen: * en Tomcat

Access-Control-Allow-Origen: *

de varias diferentes enlaces en stackoverslow y de google, la mayoría ha apuntado a resource. This vuelve a decir lo mismo sobre cómo hacerlo. He replicado lo mismo, pero todavía no se muestra el encabezado. Esto es lo que he hecho: 1) Copiado de archivos cors.jar en la carpeta/lib de Tomcat 2) insertado este texto en web.xml

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowOrigin</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.supportedMethods</param-name> 
     <param-value>GET, POST, HEAD, PUT, DELETE</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.supportedHeaders</param-name> 
     <param-value>Content-Type, Last-Modified</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.exposedHeaders</param-name> 
     <param-value>Set-Cookie</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportsCredentials</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

No funciona y no puedo hacer nada. Mi versión de tomcat es -6.0.6. Por favor ayuda.

Respuesta

11

El problema surgió debido a que no incluyen jar archivo como parte del proyecto . Solo lo estaba incluyendo en tomcat lib. Mediante el siguiente en web.xml funciona ahora:

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class> 
     org.springframework.web.filter.DelegatingFilterProxy 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 

    <init-param> 
     <param-name>cors.allowOrigin</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportsCredentials</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportedHeaders</param-name> 
     <param-value>accept, authorization, origin</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportedMethods</param-name> 
     <param-value>GET, POST, HEAD, OPTIONS</param-value> 
    </init-param> 
</filter> 


<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Y el siguiente en su dependencia de proyecto:

<dependency> 
    <groupId>com.thetransactioncompany</groupId> 
    <artifactId>cors-filter</artifactId> 
    <version>1.3.2</version> 
</dependency> 
+2

Estoy teniendo problemas también. ¿En qué archivo pones la dependencia del proyecto? – Josh

+0

Mi proyecto funcionó sin la dependencia de cors-filter y de repente dejó de funcionar. Después de agregarlo funciona de nuevo. – Kenci

+0

Mi proyecto no era una creación maven, ¿entonces necesito agregar la dependencia del proyecto? He actualizado el archivo jar y web.xml, pero no funcionó. – Giri

2

Revise su web.xml nuevamente. Es posible que estés cometiendo un error tonto. Como mi aplicación funciona bien con la misma configuración de init-param ...

Copie y pegue el web.xml, si el problema persiste.

10

cambiar esta situación:

<init-param> 
    <param-name>cors.supportedHeaders</param-name> 
    <param-value>Content-Type, Last-Modified</param-value> 
</init-param> 

Para este

<init-param> 
    <param-name>cors.supportedHeaders</param-name> 
    <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value> 
</init-param> 

que tenía que hacer esto para conseguir cualquier cosa para trabajar.

1

tuve que reiniciar el navegador después de cambiar la dirección IP (DHCP inalámbrico portátil) que era mi "anfitrión cruzado" al que me refería en mi aplicación web, que resolvió el problema.

además que todos los encabezados CORS se agregan por su navegador/host son aceptados/permitido mediante la inclusión de entonces en los cors.allowed.headers

1

probar esto.

1.Escribir un filtro personalizado

package com.dtd.util; 

    import javax.servlet.*; 
    import javax.servlet.http.HttpServletResponse; 
    import java.io.IOException; 

    public class CORSFilter implements Filter { 

     @Override 
     public void init(FilterConfig filterConfig) throws ServletException { 

     } 

     @Override 
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
      HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; 
      httpResponse.addHeader("Access-Control-Allow-Origin", "*"); 
      filterChain.doFilter(servletRequest, servletResponse); 
     } 

     @Override 
     public void destroy() { 

     } 
    } 

2.Add a web.xml

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>com.dtd.util.CORSFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>