Ведение 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 - это всего лишь транспортный протокол, в то время как куки - это технология, связанная исключительно с браузером.