Предполагая, что вы используете 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) при каждом последующем вызове.