您好,我正在使用基本身份验证方法来保护我的 Web 应用程序中的某些页面。其中有指定的 url 模式如下:
<url-pattern>/Important/*</url-pattern>
<auth-method>BASIC</auth-method>
现在的问题是,如果用户使用登录表单以正常方式登录。数据将发布到我的 servlet,该 servlet 会验证用户名和密码,然后继续进行。有没有一种方法可以在此 servlet 中 setRemoteUser ,因为一旦用户尝试访问重要文件夹中的页面,身份验证输入就会再次出现。有没有办法可以通知身份验证机制用户已经登录?
这不可能。如果你实际上有一个 HTML<form>
对于登录,那么您应该更改身份验证方法BASIC
to 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>
提交到预定义的 URLj_security_check
以用户名和密码作为预定义参数j_username
and 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.0 引入的编程方式登录用户HttpServletRequest#login() http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#login%28java.lang.String,%20java.lang.String%29Servlet 中的方法。这允许对过程和验证进行更细粒度的控制。这是不可能的BASIC
验证。
The BASIC
身份验证是完全不同的事情。它显示了一个类似 JavaScript 的裸露对话框,其中包含用户名/密码输入。这不需要/使用 HTML<form>
或者其他的东西。它还将身份验证信息存储在客户端,这些信息在每个后续请求中作为请求标头发送。它不会像这样在服务器端会话中存储身份验证信息FORM
验证。
也可以看看:
- Java EE 6 教程 - 开始保护 Web 应用程序 http://docs.oracle.com/javaee/6/tutorial/doc/bncas.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)