我正在尝试使用Tomcat实现基于表单的身份验证。我所有安全的servlet都映射在mydomain / myapp下。我可以通过遵循基本教程并指定login和login_failed页面来保护此目录。
我的问题是我想要一个包含用户名/密码表单的不安全的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 :(得分:1)
阅读servlet specicification的第13.5.3.1段。它说 : “为了使身份验证正确进行,登录表单的操作 必须始终是j_security_check“。
因此您必须更改登录表单的操作。它必须是j_security_check。
答案 1 :(得分:0)
当用户尝试访问您的安全资源(securedPage.jsp)时,它们将被带到您的登录页面(例如,login.jsp)。他们将输入用户名和密码,然后单击“提交”。表单将使用操作j_security_check提交。这就是Container提供的。因此,如果登录成功,用户将被重定向到securedPage.jsp,否则他将被重定向到错误页面,你也有
答案 2 :(得分:0)
在您声明安全性的web.xml
中,您应该为两者声明它,
安全资源和开放资源。
宣布开放资源时 你不会写出“自我保护”这个&#39; aut-constaint&#39;标签
例如安全资源:
<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>