2011-06-20 10 views
3

これで、ログインページのリダイレクトが行われるという面白いケースがあります。
私のWebサービスにはログインページ(login.html)があり、ログインを処理し、ハードコードされた「デフォルト」ページにリダイレクトするためのJavaScriptがあります。 Webサービスは、ユーザーが認証されていない場合にリダイレクトを処理するサーブレット・フィルターを使用してJavaで記述されています(ログインしないでdomain/statisticsにアクセスしようとすると、domain/login.htmlに導かれます)。保護されたサービスからのリダイレクトが機能する:私はログインページにリダイレクトすることができ、ユーザーが認証されると、それらをデフォルトページにリダイレクトする。ただし、前のページにリダイレクトする問題があります。
これは通常私が試したJavaScriptの引数document.referrerで処理されますが、response.sendRedirectのJavaのリダイレクトのために、Refererヘッダーは送信されません。JavaとJavascriptによるログインページのリダイレクト

どのようにして、以前に呼び出されたページにリダイレクトすることができますか? Javascript側、Java側、またはその両方に追加する必要があるのでしょうか?

+2

はありません。 – mplungjan

+0

さて、空のヘッダ(これはデフォルトのリダイレクト)の場合がありますし、それを保持するためにある種の「ホワイトリスト」を実装していますサイト上のトラフィック、悪意のあるWebサイトへのリダイレクトを避けるなどセキュリティ上の懸念があると認識していますが、できる限り最善の方法で対応しています。私は「あなたはそれをすることはできません」と言っている以上に、より多くの勧告を望んでいます。 – ZKSteffel

+0

あなたはそれを行うことができますが、間違いなくリファラーを使用する必要があります。とにかく実際の* URLは確かにあなたのサーバーが知っている必要はありません。 – Pointy

答えて

0

私が行ったことは、オリジナルの(リダイレクトされた)URLをログインフォームの隠し入力フィールドにドロップすることでした。認証を行うコードはそのパラメータをチェックするだけで、空でなければセッションを確立した後にリダイレクトできます。

XSS攻撃などを防ぐためには注意が必要ですが、それほど難しくはありません。うまく動作します。

私のフレームワーク(Stripes)では、オリジナルのURL(HttpServletRequestオブジェクト、サーブレットパス、パス情報、およびクエリ文字列の組み合わせ)を特別な保持ボックスにプッシュできます次のリクエストでそれを私に返すためのフレームワークです。これがなければ、リダイレクト時にパラメータとしてURLを追加するだけです。最初に試行されたURLをURLエンコードし、リダイレクトURLにいくつかのパラメータ名を付けてタックします。その後、ログインページに、あなたはそれをチェック:

<c:if test='${not empty param.attemptedUrl}'> 
     <input type='hidden' name='attemptedUrl' value='${fn:escapeXml(param.attemptedUrl)}'> 
    </c:if> 

次にログインフォームが提出されたときに、ログインアクションがあまりにもそのパラメータを取得します、そしてそれは、必要に応じて、それに基づいて行動することができます。

+0

私はこれの概念を理解することができますが、それほど多くのアプリケーションは理解できません。私はjavascriptで消費するヘッダーに参照されたURLを保持するように見えることはできません。私は 'document.referrer'でアラートをポップアップさせようとしました。そして、私はnullまたはundefined(私が 'referrer'の綴り方によって)を取得します。 – ZKSteffel

+0

"document.referrer"は使用しないでください。それは絶対に信頼できるものではありません。 – Pointy

+0

私には秒をください、私は詳細で私の答えを更新します。 – Pointy

0

リダイレクトを送信すると、選択したリソースへのリクエストが繰り返されます。 Spring Securityを最小限の構成で考えると、これを非常に簡単に行うことができます。

は、このを見てみましょう:あなたはdocument.referrerに頼ることができる方法は

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html

+0

春のセキュリティ...簡単...?以前はプロジェクトでSpring Securityを実装しようとしましたが、Mavenの依存関係を更新しようと約2日を費やしましたが、まだ動作させることはできませんでした。 ... – ZKSteffel

+0

Mavenの中央リポジトリを使用すると、基本的なセットアップでは1つの依存関係のみが必要となります(残りはトランジションとして提供されます)。それはあなたが誤って構成されているように見えます。ちょうど私の2セントを助けようとしています。 – ssedano

関連する問題