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.
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 *? –
Vérifiez les journaux de votre serveur. – zeroflagL
request.getHeader ("Origine") me montre http: // localhost: 9000. J'ai aussi essayé le joker *. –