在OSGi容器中的Jersey-Grizzly服务器内部为Rest Services配置Response对象(Jersey 1x的CORS错误预防) [英] Configure Response object for Rest Services inside a Jersey-Grizzly server, in OSGi container (CORS error prevention with Jersey 1x)

查看:133
本文介绍了在OSGi容器中的Jersey-Grizzly服务器内部为Rest Services配置Response对象(Jersey 1x的CORS错误预防)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近几天,我一直在努力解决一个问题.我已经在OSGi容器内创建了一个由Grizzly服务器托管的rest服务.此时一切正常.

The last couple of days, I have been struggling with an issue. I've created a rest service hosted by a Grizzly server inside an OSGi container. Everything is working perfectly at this point.

现在,我想在每个响应中添加标头.不是那么复杂或不合逻辑吗?但是,我找不到办法.

Now, I want to add a header in every response.Not so complex or illogical right? Yet, I can't find a way to do it.

我试图:

1)按照此问题的建议,在其余函数中获取响应对象建议(不在OSGi下的漂亮教科书.)

1) Get the response object inside the rest functions as this question suggests (pretty textbook when you are not under OSGi).

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

2) Add a handler using the code above (in this case the service method is never called)

    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中.

I am using jersey-server/client/core 1.18.1 and grizzly2-server 1.18.1, hence i prefer a solution that can be applied in this version, but I am willing to update jar versions if it cannot be done in 1.18.x.

推荐答案

您可以尝试使用Jersey过滤器.
简而言之,您应该创建实现ContainerResponseFilter的类:

You could give a try to Jersey filters.
In a nutshell, you should create class implementing ContainerResponseFilter:

public class MyFilter implements ContainerResponseFilter {

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

然后,您应该在Jersey服务器配置中注册此过滤器.
请注意,此过滤器将在每个响应上调用.要将其仅绑定到特定资源,可以使用批注绑定,该说明此处找到所有其他信息.

Then, you should register this filter in your Jersey server configuration.
Please, note, that this filter would be invoked on every response. To bind it only to specific resources, you could use annotation-binding, that is described here.
All other information you could find here.

这篇关于在OSGi容器中的Jersey-Grizzly服务器内部为Rest Services配置Response对象(Jersey 1x的CORS错误预防)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆