我想在每个页面上(在页面的标题中)使用身份验证表单,以便用户可以从任何页面进行身份验证。 我正在使用 Tomcat 的基于表单的身份验证,但是当我转到我的索引页面并尝试使用标题中的表单登录时,我得到:
HTTP 400 - Invalid Direct Reference To Login Page
有没有我可以使用的解决方法,也许是 web.xml 中的一些设置来解决这个问题?
编辑: 这是 header 的登录表单:
<form method="post" action="j_security_check">
<input type="text" name="j_username" class="login"/>
<input type="password" name="j_password" class="login"/>
<input type="submit" value="Login"/>
</form>
最佳答案
Tomcat 基于表单的身份验证概念是拦截对 protected 页面的未经身份验证的请求,并在内部重定向到单独的登录页面。它还保存了原始页面请求。用户成功登录后,将重放原始页面请求并显示 protected 页面。
据我从您的简短描述中得出的结论,您想要实现的是不同的东西。基本上,您的所有页面都是公开的。 (可选)用户可以登录,然后将获得个性化页面。
Tomcat 不会帮助您实现这一点。当您使用 j_security_check
操作时,它将无法执行任何操作,因为它从一开始就从未拦截过请求。
相反,如果提交了登录表单,您自己检查用户名和密码可能会更容易。如果他们没问题,只需将用户名放入您的 session 数据中。经过身份验证的 session 很容易被识别,因为它在 session 数据中包含用户名。
甚至可能有一种方法可以重用 Tomcat 领域,例如能够根据数据库检查用户名和密码。但我不确定。
关于forms - 基于 Tomcat FORM 的身份验证,在每个页面上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162616/