Хранение сеанса (состояния) Spring HTTP Invoker - PullRequest
3 голосов
/ 05 марта 2012

У меня есть Swing-клиент и сервер, работающий на tomcat 7, которые взаимодействуют друг с другом с помощью HTTP (invoker) Spring (3.1).Пока что связь работает нормально (даже с TSL), но сейчас я пытаюсь добавить Spring Security.

примечание: в типичном веб-приложении я использую обычную аутентификацию для аутентификации пользователя.После того, как мой CustomAuthenticationProvider возвращает объект аутентификации для пользователя, все «просто работает», что означает, что при каждом последующем запросе автоматически устанавливается SecurityContext.Я полагаю, логин возвращает сеансовый ключ клиенту, который отправляется при каждом запросе для идентификации сеанса.

Это почти то, что я ищу с HTTP-Invoker.В настоящий момент мне кажется, что я получаю новый контекст при каждом запросе, что плохо, потому что мой метод customAuthenticationManager.authenticate (Authentication auth) довольно дорогой и должен вызываться только один раз за пользовательский сеанс.Любая идея?

edit Я нашел некоторые намеки на это в http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvoker, но так как этой ссылке более 8 лет, я надеялся на более простое решение.

1 Ответ

3 голосов
/ 07 марта 2012

Я нашел решение сейчас.Во-первых, вы должны знать, что часть безопасности Spring полностью такая же, как и в веб-приложении (и это здорово).

На стороне клиента вам нужна более сложная реализация HTTP-клиента.Я использовал org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor.На стороне сервера вы можете использовать create-session="always" -атрибут <http -элемента, чтобы сеанс всегда создавался.Тем не менее, я обнаружил, что лучше создать сеанс сам (просто вызовите httpServletRequest.getSession (), который создает сеанс, если он не существует), потому что таким образом вы можете указать, когда это делать.В моем случае я создаю сессию в моем authenticationProvider, только если аутентификация прошла успешно.

...