这是不可能的。如果您实际上有一个<form>
用于登录的 HTML,那么您应该将身份验证方法从 更改BASIC
为FORM
。
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
您还需要确保您的 HTML<form>
以j_security_check
用户名和密码作为预定义参数j_username
和j_password
.
<form action="j_security_check" method="post">
<input type="text" name="j_username" />
<input type="password" name="j_password" />
<input type="submit" value="login" />
</form>
这样,容器将以您需要的方式设置登录名,并且用户名将由getRemoteUser()
. 此外,任何直接访问受限 URL 的未经身份验证的用户都将被自动转发到登录页面。成功登录后,它会自动转发回最初请求的页面。
此外,FORM
在与 Servlet 3.0 兼容的容器(Tomcat 7、Glassfish 3 等)上使用身份验证方法时,您将能够通过 Servlet 3.0HttpServletRequest#login()
在 servlet 中引入的方法以编程方式登录用户。这允许对过程和验证进行更细粒度的控制。这对于身份验证是不可能的BASIC
。
BASIC
身份验证是完全不同的事情。它显示了一个带有用户名/密码输入的纯 JavaScript 外观对话框。这不需要/使用 HTML<form>
或其他东西。它还将身份验证信息存储在客户端,这些信息在每个后续请求中作为请求标头发送。它不会像FORM
身份验证那样将身份验证信息存储在服务器端会话中。
也可以看看: