2012-03-02 42 views
5

我正在學習Tomcat環境上的Java servlets。我正在學習如何使用j_security_check使用基於表單的登錄身份驗證。所以,在我的servlet中,我有一個擁有j_username和j_password的登錄頁面。在該servlet的web.xml文件中,我有歡迎頁面列表,指明我的着陸頁「landing.html」。所以,理想情況下,成功登錄後,我希望用戶重定向到「landing.html」頁面。j_security_check重定向

沒有認證(沒有基於表單的認證),我的servlet打開並按預期轉到「landing.html」頁面(「localhost:8080/MyServlet」 - 顯示了landing.html的內容)。

但是,現在,在使用j_security_check成功登錄後,出於某種原因,我會自動重定向到.css文件以獲取「landing.html」文件。我不明白爲什麼會發生這種情況。

是否有一種特殊的方式,我可以告訴服務器在成功驗證後只加載「landing.html」頁面,而不是轉發到其他地方?

編輯

*好吧,我解決了這個問題。 成功驗證後加載的css文件列在login.html頁面的<head></head>標籤中,其中j_username和j_password是。我添加了該css文件以使登錄頁面的設計與網站的其餘部分一致。我的猜測是,當服務器重新加載想要的資源時,出於某種原因,它只是重新加載頭標記中的頂級CSS文件。 真的很奇怪。 那麼,是j_security_check是做在Tomcat的網站任何身份驗證的最佳方法還是有一個更好,更可靠的方式*

回答

10

基於表單的認證的行爲如下:?

  • 的瀏覽器發送到受保護的URL
  • 服務器攔截其請求的請求,認爲你沒有通過身份驗證,並重定向到loginf表單頁面
  • 用戶登錄服務器重定向到觸發URL Ť他認證:在第一步中詢問受保護的URL。

這很好,因爲它允許用戶爲受保護的頁面添加書籤,第二天回到該書籤頁面,登錄並直接進入書籤頁面而不是歡迎頁面。

我的猜測是登陸頁面是不是保護,但它的CSS文件是。因此,觸發驗證的請求是嘗試加載CSS文件的請求,導致用戶被重定向到CSS文件。