2009-08-25 12 views
3

フォームベースの認証を使用し、server.xmlで必要な設定を行うようにアプリケーションを構成しました。TomcatでのJSP Webアプリケーションフォームベース認証

保護されたページにアクセスしようとすると、ログインページに正しくリダイレ​​クトされます。ログインページで正しいユーザーIDとパスワードを入力しますが、ログインしていない場合はログインエラーページが表示されます。

私は、Mac OS X上で事前に

感謝をMySQLデータベースを伴って含むTomcatのプロジェクトを実行するためにEclipseを使用しています。

+1

あなたのweb.xmlおよびおそらくいくつかのログスニペットを投稿することができますか? – chotchki

+0

また、ログイン・ページ – ChssPly76

+0

のユーザーのserver.xml(Realmを定義する部分)とフォーム宣言を投稿してください。私はEclipseを使用してTomcatを起動するとログが表示されません。しかし、私がスタンドアロンのTomcatを起動すると、ログが表示され、そこに珍しいものは見られません。私はまた、必要なテーブルを定義し、レルム定義で参照されていることにも言及する必要があります。 –

答えて

4

最後にこの機能があります。

私はアプリケーションをデプロイするためにEclipseを使用しているので、EclipseはtomcatがEclipseを使用して起動されたときにtomcatによって実際に使用されるserver.xmlを含むServersという名前のプロジェクトを追加します。

解決策は、eclipseでServersプロジェクトのserver.xmlに領域を変更することです。

ご協力いただきありがとうございます。

敬具、 Zaheer

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

0

あなたの設定は私に似ています。考えられる2つの問題:

  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()と2番目のauthenticate()メソッドを実行します。

+0

ChssPly76、あなたの返事のおかげで。私はあなたがポイント#1の意味を理解していませんが、私はそれをどうにかして試してみましたが、それはlocalhost:8080/j_security_checkを探していたので動作しません。私はデータベースの定義を二重にチェックしていて、それは問題ありません。私は今、残された選択肢がないと思うが、Tomcatのソースコードを突き抜ける。私はあなたにこれについての更新を持って戻ってきます。 ええ、私の返事は答えとしてではなく、コメントとして、私は返信でXMLとHTMLをフォーマットしたいので、私はコメントとして投稿しました。次回は気をつけます。 乾杯 –