Настройте объект Response для служб Rest внутри сервера Jersey-Grizzly, в контейнере OSGi (предотвращение ошибок CORS с помощью Jersey 1x)
Последние пару дней я боролся с проблемой. Я создал службу отдыха, размещенную на сервере Grizzly внутри OSGi
контейнер. На данный момент все работает отлично.
Теперь я хочу добавить заголовок в каждый ответ. Не так сложно или нелогично, не так ли? Тем не менее, я не могу найти способ сделать это.
Я пытался:
1) Получите объект ответа внутри остальных функций, как предполагает этот вопрос (симпатичный учебник, когда вы не находитесь под 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. Икс.
1 ответ
Вы можете попробовать фильтры на Джерси.
В двух словах, вы должны создать класс, реализующий ContainerResponseFilter:
public class MyFilter implements ContainerResponseFilter {
@Override
public void filter(
ContainerRequest request,
ContainerResponse response
) throws IOException {
request.getHttpHeaders().add(<header name>, <header value>);
}
}
Затем вы должны зарегистрировать этот фильтр в конфигурации вашего сервера на Джерси.
Обратите внимание, что этот фильтр будет вызываться при каждом ответе. Чтобы привязать его только к конкретным ресурсам, вы можете использовать привязку к аннотациям, которая описана здесь.
Всю другую информацию вы можете найти здесь.