2009-08-25 46 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

相关问题