Как я могу управлять сеансами пользователей при использовании веб-служб? - PullRequest
10 голосов
/ 07 ноября 2011

В случае, если пользователь работает с веб-приложением через веб-браузер, сеанс пользователя управляется сервером приложений.Он заботится о создании сеансов, валидации, тайм-аутах, удалениях и т. Д.

И насколько я знаю, в другом случае таких механизмов нет, если пользователь работает с приложением через удаленный клиент и использует веб-службы SOAP.,

Итак, вопрос в том, как мы можем управлять сеансами пользователей в случае веб-сервисов и реализовывать такие же механизмы управления сеансами, как аннулирование, продление, удаление?

Ответы [ 3 ]

9 голосов
/ 07 ноября 2011

Предполагая, что вы используете JAX-WS и SOAP / HTTP, можно работать и с безопасностью, управляемой контейнером (и, например, сессионными cookie). Вам просто нужно добавить WebServiceContext в ваш сервис. Позволяет получить доступ ко всем переменным среды HTTP:

@Resource
WebServiceContext wsContext;

Подробный пример доступен здесь . Конечно, ваши клиенты также должны это поддерживать (если они основаны на JAX-WS, это работает). Тем не менее, практическое правило заключается в том, что веб-сервисы вообще не должны поддерживать никакого состояния, они должны вести себя как лица без состояния. Смотрите это на SO .

Редактировать: Вы можете получить доступ к ServletRequest:

@WebMethod
public void foo() {
    final MessageContext mc = this.wsContext.getMessageContext();
    final ServletRequest sr = mc.get(MessageContext.SERVLET_REQUEST);

    /* works if this is a HTTP(s) request */
    if (sr != null && sr instanceof HttpServletRequest) {
        final HttpServletRequest hsr = (HttpServletRequest) sr;
        hsr.getSession(true);

        /* ... */

    } else {
        /* do some exceptional stuff */
    }

}

Сеанс, созданный выше, должен вести себя точно так же, как и «стандартный» веб-сеанс. Вы должны убедиться, что ваши клиенты это понимают. Они должны предоставлять идентификатор сеанса (cookie) при каждом последующем вызове.

2 голосов
/ 26 мая 2018
  • Веб-служба не поддерживает состояние сеанса для достижения высокой масштабируемости , веб-служба разработана без состояния .
  • Обработка состояния сеанса не является частью спецификации SOAP. Файл cookie хранит токен, который действует как идентификатор сеанса. Существует несколько способов передачи идентификатора сеанса: в виде файла cookie HTTP, в качестве заголовка SOAP или в качестве элемента в теле сообщения SOAP.
  • Заголовок SOAP не зависит от транспорта, но для этого требуется, чтобы клиент и служба SOAP согласовали формат заголовка SOAP, и для этого требовалось, чтобы реализации клиента SOAP и сервера SOAP поддерживали заголовки SOAP. Если вы используете тело SOAP для передачи идентификатора сеанса, то это зависит от службы (т. Е. Кода вашего приложения), чтобы восстановить состояние при каждом вызове. Обработка с учетом состояния может сделать взаимодействие между SOAP немного сложнее, но это работает. Проверьте возможности вашей реализации SOAP. источник
2 голосов
/ 07 ноября 2011

Я думаю, вы говорите о том, как поддерживать сеанс веб-сервисов (веб-сервисы с полным состоянием).
В этом случае вам может помочь следующая ссылка:
https://blogs.oracle.com/sujit/entry/ws_addressing_and_stateful_webservice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...