4

我对 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代码中缺少的东西?

4

2 回答 2

4

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

这就是 HTTP BASIC AUTH 的设计方式,它允许将所有身份验证状态保留在客户端中。换句话说,它不可能使用基本/摘要身份验证注销,服务器无法阻止客户端缓存和重新发送 BASIC 身份验证身份验证器对服务器的后续请求。

我的建议是使用基于表单的身份验证loginHTTPServletRequest.

参考

于 2010-05-23T14:46:50.933 回答
1

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

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

使用过滤器,您可以在整个系统范围内强制执行此操作。

于 2010-05-23T13:01:28.753 回答