Как создать новый файл cookie для нового зарегистрированного пользователя в Spring Security - PullRequest
0 голосов
/ 10 июня 2011

Я использую Spring Security 3.0 с Spring MVC. Мое веб-приложение на Java - это корзина покупок. Я использую Службу, которая хранит список покупок в сеансе. Когда пользователь А создает список покупок, а затем переходит к выходу из системы и повторному входу в систему, список покупок восстанавливается как обычно, но если другой пользователь Б перейдет в то же приложение, используя тот же браузер и перейдите к входу в систему, сеанс восстанавливается с помощью списка покупок пользователя A!.

Я могу понять, что файл cookie JSESSION не изменяется, когда пользователь A выходит из системы в том же браузере. По этой причине, если пользователь A входит в приложение с помощью другого браузера, у него нет тех же данных сеанса, файл cookie JSESSION отличается.

Я использую свой собственный обработчик успеха аутентификации для входа и выхода.

    <http auto-config="true" use-expressions="true">
    <intercept-url pattern="/index.html" access="permitAll"/>
    <form-login login-page="/index.html"
              default-target-url="/index.html"
              authentication-success-handler-ref = "loginSuccessHandler"
              />

    <logout  invalidate-session="false" logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
   <!-- <logout  invalidate-session="false" success-handler-ref="logoutSuccessHandler" /> -->
</http>

И да, использование invalidate-session = "true" может быть краткосрочным решением, но в этом случае я не могу использовать данные, сохраненные в сеансе.

Что я хочу, так это чтобы пользователь UserA входил в браузер, сохранял некоторые данные в сеансе (список покупок), а затем выходил из системы, чтобы у UserB был свой собственный сеанс, вместо использования сеанса UserA, я подозреваю, что ответ находится в назначении нового cookie для userB, но также для назначения старого cookie для UserA.

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Ближайший элемент - <session-managemement>.

  • Если для атрибута session-fixation-protection установлено значение "migrateSession", новый токен будет иметь атрибуты сеанса из старого токена.

  • Если установить значение "newSession", атрибуты сеанса будут отбрасываться.

Подробнее см. В руководстве SpringSecurity .


То, что я хочу, это чтобы пользователь UserA входил в браузер, сохранял некоторые данные в сеансе (список покупок), а затем выходил из системы, чтобы у UserB был свой собственный сеанс, вместо использования сеанса UserA, я подозреваю, что ответ находится в назначении нового cookie для userB, а также для назначения старого cookie для UserA.

Не думаю, что вы достигнете этого, просто изменив токен сеанса. Проблема в том, что браузер хранит только один токен сеанса. После того, как токен был изменен, браузер не знает его старого значения, а сервер не знает, кому принадлежит старый токен. Если вы хотите, чтобы список покупок сохранялся после окончания сеанса (т. Е. После выхода пользователя A из системы), вам придется сохранить его в другом месте.

0 голосов
/ 10 июня 2011

Вам необходимо хранить корзину покупок в БД, а не в сеансе. Вам также потребуется работа cron, которая удаляет устаревшие тележки, чтобы они не заполняли базу данных.

...