我对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());

我会 总是 希望看到用户名/登录窗口,因为 logout() 功能。相反,它似乎是一种“缓存”机制,可以重新填充凭据并取消我的注销...

行政

基本的

===^===

空值

空值

=== v ===

行政

基本的

我的Firefox还是Servlet代码中缺少的问题?

有帮助吗?

解决方案

我总是希望看到用户名/登录窗口,因为 logout() 功能。相反,它似乎是一种“缓存”机制,可以重新填充凭据并取消我的注销...

这就是HTTP Basic Auth设计的方式,它允许所有身份验证状态保存在客户端中。换句话说,它 不可能的 要使用Basic/Digest身份验证注销,服务器不能阻止客户端缓存,并在后续对服务器的请求中重新升级基本Auth Authenticator。

我的建议是使用基于表格的身份验证和 login 的方法 HTTPServletRequest.

参考

其他提示

两者都不是。登录后,浏览器将始终将您的用户ID和密码传递给URL。直到您重新启动浏览器。据我所知,每个浏览器都这样做。据我所知,目前没有办法告诉浏览器忘记凭据。

但是,一旦您登录,您会看到您的会话会有所不同。通常的解决方案是在会话中添加某种变量。说“ loggedin”。如果缺少此变量,您知道用户必须先登录,然后重定向以说login.jsp。一旦用户通过此JSP,您将再次设置此变量。

使用过滤器,您可以强制执行此系统范围。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top