tomcat中基于JSP web应用程序表单的身份验证

tomcat中基于JSP web应用程序表单的身份验证,tomcat,Tomcat,我已将应用程序配置为使用基于表单的身份验证,并在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" userTabl

我已将应用程序配置为使用基于表单的身份验证,并在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"/>
当我尝试访问受保护的页面时,我被正确重定向到登录页面。在登录页面上,我提供了正确的用户名和密码,但它不会让我登录,而是显示登录错误页面

我使用Eclipse在Tomcat和MacOSX上的MySQL数据库中运行该项目


提前感谢。

这里是定义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>

轮廓
/我的个人资料
成员
形式
/signin.jsp
/signin_error.jsp
成员
下面是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>


谢谢你们在这里帮助我,我真的被困住了

您的配置在我看来是正确的。两个可能的问题:

  • 是否将应用程序部署到非根上下文?如果是这样,您可能需要将表单操作更改为
    /j\u security\u check
    。你可能想试试这个,事实上-我记得一些Tomcat版本对此相当挑剔

  • 您确定您有
    用户(电子邮件、密码)
    用户角色(电子邮件、角色名称)
    表,其中包含适当的行,并且在领域配置中指定的用户可以访问这些表吗?我知道你说过你会的,但这是唯一一件可能出错的事情,所以再检查一遍也不会有什么坏处


  • 如果以上两种方法都没有帮助,我唯一能建议您下载Tomcat源代码,并在Eclipse下运行时逐步完成。对于Tomcat 6,您需要在
    org.apache.catalina.realm.JDBCRealm.authenticate(字符串用户名、字符串凭据)
    (第341行,尽管我可能没有最新的源代码)中设置一个断点,然后逐步执行
    open()
    和第二个
    authenticate()
    方法

    终于让它工作了

    当我使用eclipse部署我的应用程序时,eclipse添加了一个名为Servers的项目,其中包含server.xml,当tomcat使用eclipse启动时,它实际上由tomcat使用

    因此,解决方案是在eclipse中对Servers项目中的server.xml进行领域更改

    谢谢你们的帮助和支持

    致以最良好的祝愿,
    Zaheer

    你可以发布你的web.xml和一些日志片段吗?也可以发布你的server.xml(你定义领域的部分)和你的表单声明到登录页面。请看下面我的回复。当我使用eclipse启动tomcat时,我看不到任何日志。但是当我启动tomcat standalone时,我看到了日志,没有看到任何异常。我还应该提到,我已经定义了必要的表以及领域定义中引用的表。作为记录,这应该添加到您的问题中,而不是作为答案提供。谢谢您的回答。我不明白你说的第1点是什么意思,但我无论如何都试过了,但它不起作用,因为它在寻找本地主机:8080/j#u security#u check,当然不存在。我已经仔细检查了我的数据库定义,它们是正确的。我想我现在别无选择,只能逐步浏览tomcat的源代码。我会给你们回个最新消息。是的,我的回复不应该作为答案,而是作为评论,但我想在回复中格式化XML和HTML,所以我把它作为评论发布。下次我会小心的。干杯