2016-12-07 3 views
1

j'ai essayé deux façons de définir l'en-tête CORS:Access-Control-Allow-Origin pas défini en réponse

  • Ajout mon propre filtre de servlet
  • utilisant com.thetransactioncompany.cors-Filer
  • Utilisation de sources WebMvcConfigurer Bean

Rien n'a fonctionné !!!

Quelqu'un peut-il m'aider? Voici la première méthode ...

web.xml

<!-- Spring Container --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextClass</param-name> 
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> 
</context-param> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>de.hotelonlineportal.config.AppConfig</param-value> 
</context-param> 

<!-- Device Detection --> 
<filter> 
    <filter-name>deviceResolverRequestFilter</filter-name> 
    <filter-class>org.springframework.mobile.device.DeviceResolverRequestFilter</filter-class> 
</filter> 

<!-- Rest Dispatcher --> 
<servlet> 
    <servlet-name>rest-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>rest-dispatcher</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<!-- Spring Security --> 
<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> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

<!-- CORS Filter --> 
<filter> 
    <filter-name>cors-filter</filter-name> 
    <filter-class>de.hotelonlineportal.security.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cors-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

CORSFilter.java

public class CORSFilter implements Filter { 

    private static Logger logger = LogManager.getLogger(CORSFilter.class); 

    public CORSFilter() { 
     logger.info("SimpleCORSFilter init"); 
    } 

    @Override 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
      throws IOException, ServletException { 

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

     response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS,DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); 

     chain.doFilter(req, res); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) { 
    } 

    @Override 
    public void destroy() { 
    } 

} 

Si invoquer une requête HTTP le filtre obtenu appliqué avec succès mais le repsonse ne contient pas d'accès -Control * en-tête.

débogueur Chrome me montre ceci dans la console:

XMLHttpRequest ne peut pas charger http://localhost:8080/hop-backend/rest/shop/listHotelsLandingPage. Non L'en-tête 'Access-Control-Allow-Origin' est présent sur la ressource demandée. L'origine 'http://localhost:9000' n'est donc pas autorisée accès. La réponse avait le code d'état HTTP 500.

+0

Si vous ouvrez une session request.getHeader ("Origine"), est quelque chose là? À des fins de débogage, avez-vous essayé de définir l'en-tête Access-Control-Allow-Origin sur *? –

+0

Vérifiez les journaux de votre serveur. – zeroflagL

+0

request.getHeader ("Origine") me montre http: // localhost: 9000. J'ai aussi essayé le joker *. –

Répondre

0

L'inspection de vous utilisez tomcat. Essayez le tomcat-CORSFilter.

Utiliser le filtre et init-param comme ci-dessous:

<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> 
<!-- CORS Filter --> 
<filter> 
    <filter-name>cors-filter</filter-name> 
    <filter-class>de.hotelonlineportal.security.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cors-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping>