保罗·桑索塔给我指出了正确的方向。
最后我给系统添加了一个过滤器
ServletContextHandler
. 与链接的文章不同,我实际上不必从头创建过滤器。我可以使用一个现有的过滤器类:即。
org.eclipse.jetty.servlets.CrossOriginFilter
.
FilterHolder filterHolder = context.addFilter(CrossOriginFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,OPTIONS");
filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
filterHolder.setInitParameter(CrossOriginFilter.ALLOWED_HEADERS_PARAM, "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
filterHolder.setInitParameter(CrossOriginFilter.ALLOW_CREDENTIALS_PARAM, "true");
filterHolder.setInitParameter(CrossOriginFilter.CHAIN_PREFLIGHT_PARAM, "false");
上面的一些参数可以省略,因为它们是默认值。但对我来说最关键的是
CHAIN_PREFLIGHT_PARAM
到
false
.
一个很好的副作用是,我可以简化实际服务的代码。它们不再需要添加特殊的头,相反,它们现在只需返回
Response.ok().entity(result).build();
.