2012-01-21 15 views
2

私はアプリケーションにGWT履歴サポートを追加しています。私は何をすべきか分かりません。この質問に対する答えは必ずしもGWT関連である必要はありません。Springセキュリティログインを使用してGWT履歴ハッシュを維持する

GWTの履歴サポートは、ハッシュタグ(つまり、index.html#token)を渡して機能します。セキュリティ制限では、実際にindex.htmlにアクセスする前にログインする必要があるため、トークン(login.html#token)を保持してログインページに送信されます。ここまでは順調ですね。ユーザーは認証され、Springはindex.html(デフォルトのターゲット)にそれらを送信し、URLの一部の#tokenを削除します。

トークンを維持し、新しく認証されたユーザをリクエストしたページ(index.html#token)に送信するにはどうすればよいですか?私はすでにSpring Securityの認証を取得しているので、私のアプリケーションがログインを処理する方法を再構成したくないです。

+1

解決策を質問に埋め込むのではなく、回答として投稿してください。 –

+1

ありがとうございます。 –

+0

ありがとう、親切なミスター。 –

答えて

4

多くの掘削の後、私は答えをSpring's Jiraに見つけました。 Colin Alworthが述べているように、そのトークンは実際にリクエストの一部ではないため、Spring Securityはそれをサーバー側で見ることはないため、最終的なURLを判断するために使用することはできません。だから、私が使ったアプローチは、j_spring_security_checkにハッシュ(クライアント側)を追加して、それをj_spring_security_check#tokenとすることでした。トークンはうまくいって渡され、私は働くトークンで安全性の高いアプリを持つことができます。

あなたの助けをお寄せいただきありがとうございました。あなたの答えは私に正しい方向に考えさせてくれました。

3

サーバーは、このトークンがGET/POST要求の一部として表示されることはありません。これは、ブラウザでのみ表示されます。私が過去にこれを見てきた最善の解決策は、ログインページが現在のwindow.location.hashを書き留めて、ログインフォームと一緒にそれを渡すことです(リダイレクトが行われ、ハッシュを保持していると仮定します)。適切にリダイレクトできるようにサーバーにログインパラメータとして渡します。

0

ここで何が起こるかだ、それはあなたが問題解決に役立つかもしれない:

  1. login.htmlとにindex.htmlをから認証されていないユーザーを送信する可能性が高いHTTPの3xxリダイレクトとして実装最も であり、それはなぜ ブラウザですハッシュフラグメント(#token)を保持します。
  2. ログインすると、springは3xxリダイレクト経由で ではなくlogin.htmlからindex.htmlに送信し、ブラウザはトークンを保持しません。

解決策の1つは、token.htmlにトークンを注入し、GWTでそれを取り上げることです。別の方法は、login.html - > index.htmlを3xxリダイレクトにすることです(春に許可する場合)。

関連する問題