2009-08-25 101 views
3

我已經配置我的應用程序以使用基於表單的身份驗證,並在server.xml中設置所需的設置。在tomcat中基於JSP web應用程序的身份驗證

當我試圖訪問受保護的頁面,我正確地重定向到登錄頁面。在登錄頁面上,我提供了正確的用戶名和密碼,但它不會將我登錄,而是顯示登錄錯誤頁面。

我使用Eclipse在Mac OS X上運行非常久遠的MySQL數據庫,Tomcat中的項目提前

感謝。

+1

您可以發佈您的web.xml,也許一些日誌片斷? – chotchki 2009-08-25 23:41:06

+0

同時在登錄頁 – ChssPly76 2009-08-25 23:44:56

+0

上發佈你的server.xml(你定義Realm的部分)和你的表單聲明。請看下面我的回覆。當我使用eclipse啓動tomcat時,我看不到任何日誌。但是當我單獨啓動tomcat時,我看到日誌並沒有看到任何異常。我還應該提到,我已經界定了必要的表格,並在領域定義中提及了這些表格。 – 2009-08-26 14:28:02

回答

4

終於搞定了這個工作!

由於我使用Eclipse部署應用,日食增加其中包含的server.xml這實際上是當Tomcat是使用eclipse開始使用Tomcat的項目命名的服務器。

因此,解決辦法是使境界更改的server.xml中的服務器項目蝕。

感謝您對所有您的幫助和支持你們。

最好的問候, 查希爾

2

下面是基於表單的身份驗證在web.xml資源,並聲明部分定義的安全性。

<security-constraint> 
     <web-resource-collection>  
      <web-resource-name>profile</web-resource-name> 

      <url-pattern>/myProfile</url-pattern> 

     </web-resource-collection>   
     <auth-constraint> 
      <role-name>member</role-name>   
     </auth-constraint> 
    </security-constraint> 

    <login-config> 
     <auth-method>FORM</auth-method> 
     <form-login-config> 
     <form-login-page>/signin.jsp</form-login-page> 
     <form-error-page>/signin_error.jsp</form-error-page> 
     </form-login-config> 
    </login-config> 

    <security-role><role-name>member</role-name></security-role> 

這裏是server.xml中的領域定義。

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99" 
     driverName="com.mysql.jdbc.Driver" 
    connectionURL="jdbc:mysql://localhost/dbname?user=root&amp;password=root" 
     userTable="users" userNameCol="email" userCredCol="password" 
    userRoleTable="user_roles" roleNameCol="role_name"/> 

此外請注意,我已經在tomcat的lib文件夾中包含了所需的mysql jar文件。

這是我的登錄表單。

試圖幫助我在這裏
<form class="form" id="login_form" action="j_security_check" method="post"> 
<input class="element" id="element_1" style="WIDTH: 255px" maxlength="200" name="j_username"/> 
<input class="element" id="element_2" style="WIDTH: 255px" type="password" maxlength="200" name="j_password"/> 
</form> 

謝謝你們,我真的停留在此!

+2

爲了記錄,這應該已被添加到您的問題,而不是提供作爲答案 – ChssPly76 2009-08-26 19:15:09

0

您的配置對我來說是正確的。兩個可能的問題:

  1. 您是否正在將應用程序部署到非根環境?如果是這樣,您可能需要將表單動作更改爲/j_security_check。無論如何,你可能會想嘗試這個,實際上 - 我記得一些Tomcat版本對此非常挑剔。

  2. 你確定你有users(email, password)user_roles(email, role_name)表與他們相應的行和他們接觸到的領域配置指定的用戶?我知道你說過你是這樣做的,但這是關於唯一可能出錯的其他事情,所以雙重檢查不會受到傷害。

如果沒有上述幫助,我可以建議的唯一的事情是你下載的Tomcat源,並通過它一步的Eclipse下運行一段時間。對於Tomcat 6,你會希望把一個斷點org.apache.catalina.realm.JDBCRealm.authenticate(String username, String credentials)(線341,雖然我可能沒有最新的源),並通過open()和第二authenticate()方法步驟。

+0

ChssPly76,感謝您的答覆。我不明白你說的第一點是什麼意思,但無論如何我都試過了,它不起作用,因爲那時它尋找localhost:8080/j_security_check,這是不合時宜的。我有雙重檢查我的數據庫定義,他們都沒問題。我想我現在沒有選擇,只能通過tomcat的源代碼。我會盡快回復你們。 是的,我的答覆不是作爲回答,而是作爲評論,但我想在回覆中格式化XML和HTML,所以我將其作爲評論發佈。下次我會小心的。 乾杯 – 2009-08-27 12:37:45

相關問題