我有一个在apache tomcat中运行的Web应用程序,我已经使用“ j_security_check”来保护此应用程序。我的代码如下,
login.jsp
<div id="loginForm"> <form id="loginfrm" method="post" action="j_security_check"> <table> <tr> <td>User Name</td> <td><input type="text" id="name" name="j_username" size="20" /></td> </tr> <tr> <td>Password</td> <td><input type="password" id="phone" name="j_password" size="20" /></td> </tr> <tr> <td></td> <td align="right"><input type="submit" value="Login" id="submitButton"></td> </tr> </table> </form> </div>
web.xml
<web-app ...> <login-config> <auth-method>FORM</auth-method> <realm-name>Example Form-Based Authentication Area</realm-name> <form-login-config> <form-login-page>/success.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> </web-app>
错误页面,
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Login ERROR!</h1> </body> </html>
成功页面
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>Login Success</h1> </body> </html>
在这里,如果我输入了错误的用户名和密码,则会成功显示错误页面,但是当我输入正确的密码和用户名时,
HTTP Status 400 - Invalid direct reference to form login page type Status report message Invalid direct reference to form login page description The request sent by the client was syntactically incorrect (Invalid direct reference to form login page). Apache Tomcat/7.0.22
请任何人都可以告诉我我哪里错了?
该行:
<form-login-page>/success.jsp</form-login-page>
在web.xml实际上应该是:
<form-login-page>/login.jsp</form-login-page>
这告诉tomcat,每当您到达受保护的页面时,登录表单都位于login.jsp。缺少的是实际上需要进行身份验证才能看到的受保护页面的定义:
<security-constraint> <web-resource-collection> <web-resource-name> Entire Application </web-resource-name> <url-pattern>/success.jsp</url-pattern> </web-resource-collection> <auth-constraint> <role-name> 'the name of the group with access' </role-name> </auth-constraint> </security-constraint>
以及的定义realm,这是您的用户名/密码对(tomcat realm)的存储库。
realm
进行这些更改后,您http://localhost:8080/succes.jsp应将其重定向到登录页面,并在将有效凭据集发送到/success.jsp并将无效凭据集发送到/error.jsp。
http://localhost:8080/succes.jsp
/success.jsp
/error.jsp