2011-07-20 10 views
1

目的:ユーザーは認証なしでページにアクセスしようとします。サイトはログインページにリダイレクトされ、アクセスしようとしたページに返された詳細を入力します。URLのナビゲーション履歴を記録する

私は、セッション中の最後のURLを記録するフィルターを持っています。次のコードは、私がuriを取得する方法です。実際に

String uri = request.getRequestURI().toString(); 
String queryString = request.getQueryString(); 
String completeUri = uri; 
if (queryString != null) 
{ 
    completeUri += "?" + queryString; 
} 

このフィルタの継ぎ目は、外部CSSファイル、ページなどの個々の画像をキャッチするには、画像やCSSファイルへのポインティングを働き、半分の時間の半分の時間についてのようにします。

フィルタのマッピングがある...

<filter> 
    <filter-name>ComprehensiveFilter</filter-name> 
    <filter-class>core.website.control.filter.ComprehensiveFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ComprehensiveFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

そこで質問です。なぜ私のコードは、ユーザーがちょうどいたURLの代わりにイメージと外部ファイルを保存しますか?私はそれが私のフィルターのマッピングと関係があると思います。

答えて

1

このコードは、不正なアクセスを検出してログインページにリダイレクトする場合にのみ使用してください。 response.sendRedirect("login.jsp?" + completeUri)

フィルタがすべてのリソースに適用されると、login.jspに含まれるイメージとcssファイルに対してフィルタがトリガーされます。 login.jsp自体をこのリダイレクトから除外する必要があります(そうしないとループを開始します)。また、cssファイルも除外する必要があります。これはURLスキームによって異なります。代わりに<uri-pattern>

  • 、すべてのページが.jspされている場合は、あなたの行動は(ディスパッチャーサーブレットのような)単一のサーブレットを介しする場合*.jsp
  • にフィルタをマッピングし、そのサーブレットにフィルタをマッピングするには、(<servlet-name>を設定しました)
  • "pretty urls"がある場合、(フィルタ内で)要求されたリソースが.css.png.gifなどで終わるかどうかをチェックし、リダイレクトロジックを入力しないでください。
0

ページに、htmlの<img>タグを意味する画像がある場合、タグのsrc属性は実際のURLを参照します(http://www.w3schools.com/tags/tag_img.asp参照)。したがって、ページがロードされると、ブラウザはそのイメージをロードするための別のリクエストを送信します。また、フィルタはページ全体の要求だけでなく、画像ロード要求もキャッチします。

+0

答えに感謝します。サーブレットをフィルタリングするためだけにフィルタをマップする方法はありますか?私は* .jspに行くことでjspでこれを行う方法を見ることができますが、サーブレットだけをフィルタリングする方法はありません。 – user845729

関連する問題