Пользовательские аннотации для установки заголовков ответа HTTP в службе JAX-RS - PullRequest
3 голосов
/ 11 октября 2010

У меня есть веб-сервис JAX-RS, для которого я хотел бы отключить политику того же источника через новые HTTP-заголовки CORS . (Я полностью осведомлен о последствиях для безопасности.)

Мне бы хотелось иметь собственную аннотацию, которая позволяет мне устанавливать заголовки ответа HTTP. Например,

@ResponseHeaders({"Access-Control-Allow-Origin: *",
                  "Access-Control-Allow-Methods: GET"})
// Or, alternatively:
@AllowOrigins({"*"})
public String resourceMethod() { ... }

Этот подход минимизирует стандартный код, но я не уверен, есть ли тонкое техническое ограничение; JAX-RS предоставляет множество аннотаций для обработки HTTP-запроса, но не ответа, с @Produces, похоже, единственным исключением.

Я также предпочитаю держаться подальше от слишком большой конфигурации web.xml, если это возможно. Без явной необходимости использовать ResponseBuilder (это нормально, если аннотация использует его), есть ли чистый способ установки пользовательских заголовков ответа HTTP?

Чтобы уточнить, я ищу аннотации , которые интегрируются с различными способами установки заголовков ответов HTTP для минимизации стандартного кода.

1 Ответ

0 голосов
/ 11 октября 2010

Возможно, единственный управляемый спецификацией подход заключается в использовании пользовательского MessageBodyWriter. В методе writeTo () вы передаетесь в MultivaluedMap, в котором вы можете установить заголовки ответа. Вам также передаются аннотации к вызванному методу ресурса (так что вы можете получить любую пользовательскую аннотацию, какую захотите). Так что прочитайте аннотации, установите заголовки через MultivaluedMap, а затем используйте переданный OutputStream, чтобы написать тело сообщения.

В Apache Wink и, возможно, других инфраструктурах JAX-RS вы можете создавать пользовательские обработчики на стороне сервера, которые также могут читать аннотации в методе ресурса и делать все, что вы захотите (например, установить заголовки ответа по умолчанию) .

...