我在Restlet + JAXRS扩展中实现了REST服务。 在某个时刻,我不得不将CORS标题添加到响应中。 我有很多REST调用,并且手动添加标题,因为它正在运行:
return Response.status(200).header("Access-Control-Allow-Origin", "*").
header("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type").
header("Access-Control-Expose-Headers", "Location, Content-Disposition").
header("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, HEAD, OPTIONS").
entity(fsJSON).build();
但我想使用过滤器将这些标头添加到所有响应中,而无需手动添加。我发现了很多在JAX-RS中使用过滤器的例子,如:
https://jersey.java.net/documentation/latest/filters-and-interceptors.html
http://javatech-blog.blogspot.it/2015/04/jax-rs-filters-example.html
http://blog.dejavu.sk/2014/02/04/filtering-jax-rs-entities-with-standard-security-annotations/
但我无法理解如何将它们与Restlet + JAX-RS环境集成。例如,我无法在任何地方看到ContainerResponseFilter类。 有人可以帮帮我吗?
答案 0 :(得分:0)
在Restlet中创建JaxRS应用程序时,您需要创建JaxRsApplication
(请参阅此链接:http://restlet.com/technical-resources/restlet-framework/guide/2.2/extensions/jaxrs)。该类扩展了Restlet的标准应用程序。后者提供了使用getServices
方法在其上配置服务的方法。
因此,在您的情况下,您不需要使用过滤器......
请参阅有关Restlet的CorsService配置的答案:How to use CORS in Restlet 2.3.1?。
这是在Restlet JaxRS应用程序中配置CORS的方法:
Component comp = new Component();
Server server = comp.getServers().add(Protocol.HTTP, 8182);
JaxRsApplication application = new JaxRsApplication(comp.getContext());
application.add(new ExampleApplication());
CorsService corsService = new CorsService();
corsService.setAllowedOrigins(new HashSet(Arrays.asList("*")));
corsService.setAllowedCredentials(true);
application.getServices().add(corsService);
component.getDefaultHost().attachDefault(application);
否则,Restlet的相应扩展不支持JAX-RS过滤器。要添加过滤器,您需要将其作为Restlet过滤器添加到应用程序前面,如下所述:
JaxRsApplication application = new JaxRsApplication(comp.getContext());
application.add(new ExampleApplication());
MyRestletFilter filter = new MyRestletFilter();
filter.setNext(application);
component.getDefaultHost().attachDefault(filter);
希望它可以帮到你, 亨利