7

次のユースケースがあります:

ユーザーが商品を選択して購入できるウェブストアがあります。アプリケーションにログインする前に、カートに商品を追加できます。このアイテムはすべて、彼のセッションに保存する必要があります。ユーザーが「支払い」ボタンをクリックすると、資格情報/カード/その他を尋ねます。

私の問題: カートにアイテムを追加する前にログインすると、すべて正常に動作します。しかし、匿名ユーザーとしてカートにアイテムを追加しようとすると、アイテムが保存されません。匿名ユーザーとして各ページを更新した後、常に異なる JSESSIONID を受け取ります。

私の問題を説明する簡単なアプリケーションを作成することにしました。ソースなしでは解決できないと思います。

これが私のアプリケーションです:

https://github.com/AlexTestAccount/simple_test

とてもシンプルです。何かを保存しようとするコントローラーとセッション Bean が 1 つだけ含まれています。

実行するには、gradle、tomcat、および環境変数 CATALINA_HOME を定義する必要があります。

グラドル展開

ps私の英語でごめんなさい

4

2 に答える 2

1

のデバッグ ログ レベルを有効にするorg.springframework.security.web.authentication.session.SessionFixationProtectionStrategy

ログイン時にログ ステートメントが存在する必要があります。

>Invalidating session with Id '<originalSessionId>' <and : without> migrating attributes

「属性を移行せずに」と表示された場合は、Spring セキュリティSessionFixationProtectionStrategy.migrateSessionAttributesを設定する必要がありますtrue(ただし、これがデフォルトである必要があります)。

別の問題として、http から https に切り替えると tomcat がセッションを変更することがあります。これが問題であることを確認するには、まず https (ログインしていない状態) に切り替えてアイテムをカートに入れ、それらが消えるかどうかを確認します。ただし、Tomcat は通常、http から https に切り替える間、セッション コンテンツを保持する必要があります (ただし、その逆ではありません)。

于 2013-04-11T14:50:39.407 に答える