我对 Servlet 3.0 的身份验证功能有疑问:
在 Servlet v3 中使用此代码:
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
log.info("===^===");
request.logout() ;
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
request.authenticate(response) ;
log.info("===v===");
log.info(""+request.getUserPrincipal());
log.info(""+request.getAuthType());
I would always期望看到用户名/登录窗口,因为logout()
功能。相反,它似乎是一种“缓存”机制,可以重新填充凭据并取消我的注销......
Admin
BASIC
===^===
null
null
===v===
Admin
BASIC
是我的 Firefox 有问题,还是 Servlet 代码中缺少某些内容?
我总是希望看到用户名/登录窗口,因为logout() http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html#logout%28%29功能。相反,它似乎是一种“缓存”机制,可以重新填充凭据并取消我的注销......
这就是 HTTP BASIC AUTH 的设计方式,它允许将所有身份验证状态保留在客户端中。换句话说,其不可能的要使用基本/摘要式身份验证注销,服务器无法阻止客户端在向服务器发出后续请求时缓存和重新发送基本身份验证验证器。
我的建议是使用基于表单的身份验证和login http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html#login%28java.lang.String,%20java.lang.String%29的方法HTTPServletRequest http://java.sun.com/javaee/6/docs/api/javax/servlet/http/HttpServletRequest.html.
参考
- Glassfish v3 (Java EE 6) 中的新安全功能 - 第二部分 http://blogs.oracle.com/nithya/entry/new_security_features_in_glassfish1
- Glassfish v3 (Java EE 6) 中的新安全功能 - 第三部分 http://blogs.oracle.com/nithya/entry/new_security_features_in_glassfish2
- 以编程方式进行身份验证的最简单且最便携的方法 http://forums.java.net/jive/message.jspa?messageID=386382
-
如何从 Glassfish 服务器注销用户 - 需要 SUN 的帮助 http://forums.java.net/jive/message.jspa?messageID=392823
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)