在OSGi容器中的Jersey-Grizzly服务器内配置Rest服务的响应对象(使用Jersey 1x进行CORS错误预防)

时间:2015-03-06 08:00:16

标签: java rest jersey osgi

最近几天,我一直在努力解决一个问题。我在OSGi容器内创建了一个由Grizzly服务器托管的休息服务。在这一点上,一切都很完美。

现在,我想在每个回复中添加一个标题。不是那么复杂或不合逻辑吗?然而,我找不到办法去做。

我试过:

1)在this question建议的其余函数中获取响应对象(当你不在OSGi下时,漂亮的教科书)。

2)使用上面的代码添加处理程序(在这种情况下,永远不会调用服务方法)

    server.getServerConfiguration().addHttpHandler(
            new HttpHandler() {
                @Override
                public void service(Request arg0, Response arg1)
                        throws Exception {
                    arg1.setHeader("Access-Control-Allow-Origin", "*");
                }
            });

我正在使用jersey-server / client / core 1.18.1和grizzly2-server 1.18.1,因此我更喜欢可以在这个版本中应用的解决方案,但我愿意更新jar版本,如果它无法完成在1.18.x。

1 个答案:

答案 0 :(得分:2)

你可以尝试一下泽西过滤器 简而言之,您应该创建实现ContainerResponseFilter的类:

public class MyFilter implements ContainerResponseFilter {

    @Override
    public void filter(
        ContainerRequest request,
        ContainerResponse response
    ) throws IOException {
        request.getHttpHeaders().add(<header name>, <header value>);
    }
}

然后,您应该在Jersey服务器配置中注册此过滤器 请注意,每个响应都会调用此过滤器。要将其仅绑定到特定资源,您可以使用注释绑定,即here 您可以找到的所有其他信息here