Хранение сеанса (состояния) Spring HTTP Invoker

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

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

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

Любая идея?

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

1 ответ

Решение

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

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

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