#redirect #jersey #jax-rs
#перенаправление #джерси #jax-rs
Вопрос:
Я пытаюсь реализовать «обработчик / фильтр перенаправления» на стороне клиента JAX-RS (Джерси). Ожидается, что этот обработчик будет вызван до того, как произойдет фактическое перенаправление Jersey.
До сих пор я мог найти, чтобы отключить последующее перенаправление и реализовать собственный фильтр перенаправления, но это означает, что я должен реализовать полную обработку перенаправления, включая циклы обработки или другие крайние случаи, которых я пытаюсь избежать и хочу полагаться на реализацию Джерси.
Я только хочу добавить / изменить заголовок или другие параметры внутри запроса до того, как произойдет фактическое перенаправление. Также есть только несколько перенаправлений, которыми мы хотим управлять, в то время как другие перенаправления работают как есть.
Отключение перенаправления:
ClientBuilder
.newBuilder()
.withConfig(new ClientConfig(clientConfig))
.property(ClientProperties.FOLLOW_REDIRECTS, false)
.build();
Пример обработчика перенаправления:
Response resp = requestContext.getClient().target(responseContext.getLocation()).request()
.method(requestContext.getMethod());
responseContext.setEntityStream((InputStream) resp.getEntity());
responseContext.setStatusInfo(resp.getStatusInfo());
responseContext.setStatus(resp.getStatus());
Есть ли какие-либо указатели или ссылки, которые я могу использовать для перехвата перенаправления?
Комментарии:
1. К сожалению, перенаправление происходит на более низком уровне, чем Джерси. На нижнем уровне есть соединители, и эти соединители обрабатывают перенаправление. Соединитель по умолчанию использует HttpURLConnection . Свойство, которое вы установили с помощью Jersey, чтобы не следовать перенаправлениям, просто перенаправляется на HttpURLConnection (который настраивается для следования или не следования перенаправлениям), который обрабатывает перенаправление.