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

标签 java rest jersey osgi

这两天,我一直在被一个问题困扰。我创建了一个由 Grizzly 服务器托管在 OSGi 容器内的休息服务。此时一切都运行良好。

现在,我想在每个响应中添加一个 header 。不是那么复杂或不合逻辑吧?然而,我找不到办法做到这一点。

我尝试过:

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

最佳答案

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

public class MyFilter implements ContainerResponseFilter {

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

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

关于java - 在 OSGi 容器中为 Jersey-Grizzly 服务器内的 Rest 服务配置响应对象(使用 Jersey 1x 预防 CORS 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894430/

相关文章:

doinbackground 中的 java.lang.NullPointerException

java - 如何对我的 Java 程序进行突变测试?

iphone - 为使用 REST 服务的应用程序创建帐户的安全/最佳实践?

rest - 如何通过 firefox 插件 RESTClient 更改 GET-Request 的 Content-Type

java - 如何访问 Jersey 组件中的 Mule Message 属性

java REST 服务 - 无法从浏览器调用

maven - 由于 Geotools Maven 库 : "SEVERE: A child container failed during start",Tomcat 无法启动

java - 寻找一种重新运行类静态初始化器的方法

java - Flask REST POST 请求根据 json 长度失败 "Bad Request"

java - 编译警告 "static method declared final"是什么原因?