2011-07-20 247 views
1

目標:用戶嘗試訪問未經驗證的網頁。網站重定向到登錄頁面,當他們輸入詳細信息時,他們將返回到他們嘗試訪問的頁面。錄製網址導航歷史記錄

我有一個過濾器,記錄用戶在會話中的最後一個網址。下面的代碼是我如何獲得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> 

所以問題是。爲什麼我的代碼存儲圖片和外部文件,而不是用戶剛剛訪問的網址?我認爲這與我的過濾器映射有關。

回答

1

只有在您檢測到未經授權的訪問並重定向到登錄頁面時,您才應該使用此代碼。並且您應該將它作爲參數傳遞,如response.sendRedirect("login.jsp?" + completeUri)

現在,如果過濾器應用於每個資源(與您一樣),它將針對login.jsp中包含的圖像和css文件觸發。您必須從此重定向中排除login.jsp本身(否則您將進入循環),並且還必須排除css文件。這取決於你的URL方案。

  • 如果您所有的網頁都.jsp,然後映射過濾器*.jsp
  • 如果你的行爲可以通過一個單一的servlet(如分發程序Servlet),然後將過濾器映射到這個servlet(而不是<uri-pattern>設置<servlet-name>
  • 如果您有「漂亮的網址」,則(在過濾器中)檢查請求的資源是否以.css,.png,.gif等結尾,並且不要輸入重定向邏輯。
0

如果頁面上有任何圖像,即表示html <img>標記,則標記的src屬性指的是實際的URL(請參閱http://www.w3schools.com/tags/tag_img.asp)。所以當頁面被加載時,瀏覽器發出另一個請求來加載該圖像。您的過濾器不僅捕獲整個頁面的請求,還捕獲這些圖像加載請求。

+0

非常感謝您的答覆。有沒有辦法將過濾器映射到僅過濾servlet。我可以看到如何通過使用* .jsp來執行此操作,但無法僅過濾servlet。 – user845729