2011-01-21 18 views
2

我正在尝试使用Tomcat实现基于表单的身份验证。我所有的安全servlet都映射到mydomain/myapp下。我可以通过遵循基本教程并指定登录和login_failed页面来保护此目录。使用Tomcat进行表单身份验证

我的问题是,我想一个包含用户名/密码的形式,使访问者可以从那里登录不安全MYDOMAIN/index.html的。我迄今为止的最佳尝试不起作用:

<form method="POST" action="myapp/"> 
    Username: <input type="text" name="j_username"> <br/> 
    Password: <input type="password" name="j_password"> 
    <input type="submit" value="Login"> 
</form> 

有什么建议吗?

编辑:认证在这个意义上的作品,如果您尝试访问MYDOMAIN/MYAPP您重定向到登录页面。我不明白的是如何让用户登录而无需首先尝试访问受保护的页面。

+0

当你说它不起作用时,这意味着什么? – Raghuram 2011-01-21 06:07:01

回答

1

读段servlet specicification的13.5.3.1。它说: “为了验证适当地进行,登录表单 的动作必须始终j_security_check”。

所以,你必须改变你的登录表单的动作。它必须是j_security_check。

+0

当用户试图访问mydomain/myapp时,他们被重定向到登录页面,并使用j_security_check表单,并且一切正常。但是,如何将登录表单放在mydomain/index.html上,以便它们可以通过身份验证并重定向到安全部分? – user583933 2011-01-21 17:32:28

0

当用户尝试访问您的受保护资源(securedPage.jsp)时,它们将被带到您的登录页面(例如login.jsp)。他们将输入用户名和密码,然后点击'提交'。该表单将使用动作j_security_check提交。这是Container提供的。所以,如果登录全成,用户会被重定向到securedPage.jsp,否则他将被重定向到错误页面,你也有

0
在声明的安全 web.xml

,你被宣布为两, 安全资源和开放资源。

宣布开放资源 你不写 'AUT-constaint' 标签

例如受保护的资源就在:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>restricted</web-resource-name> 
     <url-pattern>/*</url-pattern>   
    </web-resource-collection> 

    <auth-constraint> 
     <role-name>*</role-name> 
    </auth-constraint> 
</security-constraint> 

和开放资源:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>open</web-resource-name> 
     <url-pattern>/path/to/open/resource</url-pattern>   
    </web-resource-collection> 
</security-constraint>