2010-09-22 112 views
0

我有一個Java/Tomcat應用程序,它爲用戶訪問主頁時創建一個cookie。該cookie用於在後續訪問中識別該用戶並生成最近的列表。這些工作正常,迄今沒有任何使用Tomcat本身的用戶身份驗證。這使我想到我的問題:問題登錄到Tomcat

在我的應用程序的某些頁面上,用戶可以選擇發表評論或保存創建的內容,當然也可以維護他們的配置文件。所以我想要做的是讓用戶在這些頁面上登錄,以便相關的操作可以被執行,例如,如果發佈評論,用戶必須首先從當前頁面登錄,該頁面並非專門用作登錄頁面,而是顯示已創建的內容。或者要訪問配置文件頁面,必須已經登錄。然後,我可以在會話變量中記錄登錄。

但是當我嘗試登錄到Tomcat時,我收到消息'Invalid direct reference to form login page',但不太明白爲什麼。在我的網頁,我使用Tomcat提供的登錄代碼,即:

<div id = "login"> 
     <form method = "POST" action='<%= response.encodeURL("j_security_check") %>' > 
      <table border="0"> 
       <tr> 
        <th align = "right">Username</th> 
        <td align = "left"><input type="text" name="j_username"></td> 
       </tr> 
       <tr> 
        <th align = "right">Password</th> 
        <td align = "left"><input type="password" name="j_password"></td> 
       </tr> 
       <tr> 
        <td align = "right"><input type="submit" value="Log In"></td> 
        <td align = "left"><input type="reset"></td> 
       </tr> 
      </table> 
     </form> 
    </div> 

我使用默認的登錄頁面提供HTML iframe也試過,但出現了同樣的信息。我想要的是登錄按照上面的方式工作,驗證用戶,然後將用戶返回到頁面。

有人能夠建議嗎?我是否需要在Tomcat或其他地方使用領域?

我正在使用Tomcat 6.X.

謝謝

摩根先生。

回答

0

當您在您的web.xml文件中設置<security-constraint>時,如果您嘗試實現未登錄的「安全」頁面,容器會自動將您重新登錄到登錄頁面。在登錄頁面中,您必須輸入登錄名和密碼繼續請求。成功登錄後,您將被重定向到安全頁面。

但是,當您嘗試從登錄頁面本身登錄時,您將收到錯誤「無效的直接引用到表單登錄頁面」。由於容器未成功登錄後應將其重定向到的位置。

也許在你的情況比較簡單寫你自己ServletFilter中

+0

這樣的Servlet過濾器將只需要讀取包含用戶信息的數據庫表,並採取相應的行動?還是在這裏需要更多? – 2010-09-22 12:51:19