@Component public class SimpleCORSFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); filterChain.doFilter(servletRequest, response); } @Override public void destroy() { } }
Au niveau de la configuration de la webapp dans Spring il faut ajouter la déclaration d'un filter.
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { PersistenceConfig.class, ServiceConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebMvcConfiguration.class };
} @Override protected String[] getServletMappings() { return new String[] { "/" };
} @Override protected Filter[] getServletFilters() { return new Filter[]{new SimpleCORSFilter()}; } }
Cet exemple est assez simple et je vais maintenant montrer comment s'interfacer avec le filter fourni par Apache Tomcat. Pour celà la première étape consiste à importer la dépendance dans votre projet. Si vous utilisez Maven vous devez ajouter dans votre pom la dépendance suivante (pensez au scope provided pour ne que la librairie ne soit pas incluse dans votre livrable)
<dependency>
<groupId>org.apache.tomcat</groupId> <artifactId>tomcat-catalina</artifactId> <version>7.0.41</version> <scope>provided</scope>
</dependency>
Au niveau de la classe de configuration du contexte de la webapp, vous pourrer utiliser
@Override protected Filter[] getServletFilters() { return new Filter[]{new CorsFilter()}; }Par contre si vous voulez personnaliser les paramètres du filter (voir la doc Apache) vous devrez passer par le fichier web.xml
Pourquoi une dépendance sur org.apache.tomcat:tomcat-catalina ? Une dépendance sur l'API servlet (plus portable) n'aurait pas suffit pour ton exemple ?
RépondreSupprimerMerci Alexis pour ton commentaire. J'ai vu qu'il manquait la fin de l'article et au niveau de la dépendance elle n'est nécessaire que si tu veux utiliser le org.apache.catalina.filters.CorsFilter.
Supprimer