Ведение HTTP-сеанса между вызовами веб-служб Hessian в Spring

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

Это возможно?

Сервисная конфигурация пружины на стороне клиента:

<bean id="partnersServiceImpl" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
    <property name="serviceUrl" value="http://localhost:8080/partners" />
    <property name="serviceInterface" value="somePackage.PartnersService" />
</bean>

В настоящее время каждый вызванный метод генерирует новый sessionID:

PartnersService partners = (PartnersService) context.getBean("partnersServiceImpl");

List<?> partnersList = partners.getSomeData(2011); // Will have one SessionID
partnersList = partners.getSomeData(2012); // Will have a new SessionID

2 ответа

Решение

Попробуйте поместить этот код в самом начале вашего приложения:

CookieHandler.setDefault( new CookieManager( null, CookiePolicy.ACCEPT_ALL ) );

Это простая настройка для активации поддержки куки. См. Javadocs для получения дополнительной информации. У меня тоже есть гессенское удаленное взаимодействие, и вот что сработало.

Проверьте исходный код HessianProxy.sendRequest() - он использует стандарт URLConnection подключиться к серверу и не обрабатывает куки. Таким образом, я считаю, что Гессиан вообще не поддерживает куки. В конце концов, HTTP - это всего лишь транспортный протокол, в то время как куки - это технология, связанная исключительно с браузером.

Другие вопросы по тегам