Nano Hash - криптовалюты, майнинг, программирование

Клиент JAX-WS: поддерживать сеанс/файлы cookie для нескольких служб

Я использую Netbeans для автоматического создания клиентов веб-сервиса на основе файлов WSDL. Это работает хорошо, за исключением того, что веб-службы, которые я использую, требуют, чтобы я передал пользовательский файл cookie в заголовке HTTP для каждой веб-службы, чтобы подтвердить свою личность.

Я использую один веб-сервис с именем Utility для получения авторизации. Это устанавливает файл cookie, который необходимо предоставлять при всех последующих вызовах любого веб-сервиса.

Этого можно добиться, установив javax.xml.ws.session.maintain на true в BindingProvider порта для веб-службы. Это отлично работает для последующих вызовов методов в веб-сервисе Utility. Проблема в том, что это поддерживает только сеанс/куки для этого единственного веб-сервиса. Мне это нужно и для других.

Мне нужно, чтобы файл cookie был передан отдельной веб-службе с именем History. Как это сделать? Возможно ли иметь класс суперсервиса, который как утилита, так и история могли бы расширяться и совместно использовать одно и то же состояние сеанса?


Ответы:


1

Я нашел решение.

Вы можете получить заголовки ответов, используя это после того, как вы сделали вызов:

((BindingProvider)port).getResponseContext().get(MessageContext.HTTP_RESPONSE_HEADERS);

Найдите заголовок Set-Cookie и сохраните его значение.

Затем перед вашим следующим запросом (в любом веб-сервисе) вы можете установить заголовок Cookie:

((BindingProvider)port).getRequestContext().put(
            MessageContext.HTTP_REQUEST_HEADERS,
                Collections.singletonMap("Cookie", Collections.singletonList(cookieValue)
            )
        );
05.02.2013
  • Возможно, вам придется добавить, что извлечение Cookie таким образом возможно только непосредственно после первого вызова — так как только там установлен Set-Cookie. Но тем не менее... большое спасибо. Это сэкономило мне много времени. 29.06.2016

  • 2

    Просто комментирую, потому что решение выше не сработало для меня. Я получил UnsupportedOperationException. Я считаю, что проблема была вызвана тем, что singletonMap не допускает изменений. Заголовки xml также были необходимы, поэтому я установил их первыми.

    Map<String, List<String>> headers= CastUtils.cast((Map)port.getRequestContext().get("javax.xml.ws.http.request.headers"));
    if (headers == null) {
        headers = new HashMap<String, List<String>>();
        port.getRequestContext().put("javax.xml.ws.http.request.headers", headers);
    }
    
    headers.put("Cookie", Collections.singletonList(cookieValue));
    ((BindingProvider)port).getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS, headers); 
    
    11.06.2014
  • Да, SingletonMaps неизменяемы — я использовал их просто для удобства. 23.09.2014
  • Вы должны просмотреть код, чтобы сделать его более компактным, зная MessageContext.HTTP_REQUEST_HEADERS == javax.xml.ws.http.request.headers 14.06.2016
  • Его версия на самом деле на один символ короче, даже с кавычками, но я понимаю, что вы имеете в виду. Использование константы, безусловно, безопаснее. :) 20.04.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..