abbiamo usato un filtro servlet normale con una voce in resources.groovy per risolvere questo problema:
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse resp, FilterChain chain)
throws ServletException, IOException {
String origin = req.getHeader("Origin");
boolean options = "OPTIONS".equals(req.getMethod());
if (options) {
if (origin == null) return;
resp.addHeader("Access-Control-Allow-Headers", "origin, authorization, accept, content-type, x-requested-with");
resp.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
resp.addHeader("Access-Control-Max-Age", "3600");
}
resp.addHeader("Access-Control-Allow-Origin", origin == null ? "*" : origin);
resp.addHeader("Access-Control-Allow-Credentials", "true");
if (!options) chain.doFilter(req, resp);
}
}
resources.groovy:
beans = {
corsFilter(CorsFilter)
}
questo funziona con le richieste CORS utilizzando authenticatio base n. Ho scritto il plugin Grails 2.x e questo mi è sembrato più semplice che farlo funzionare con Grails 3.
fonte
2015-05-14 12:17:14
Questo non sembra funzionare per me. Sto usando Grails 2.5.4 e la creazione della classe 'CorsFilter' in src/groovy e quindi la definizione del bean in ** resources.groovy ** non ha collegato il filtro. –
Non importa. Ho frainteso il commento. L'uso del plugin Grails 2.x qui sembra funzionare per me: https://github.com/davidtinker/grails-cors Grazie David! –