簡體   English   中英

Servlet 3.0注銷不起作用

[英]Servlet 3.0 logout doesn't work

我有一個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()函數,我總是希望看到用戶名/登錄窗口。 相反,它似乎是一個“緩存”機制,重新填充憑證並取消我的注銷...

管理員

BASIC

=== ^ ===

空值

空值

=== v ===

管理員

BASIC

這是我的firefox的問題,還是我在Servlet代碼中缺少的東西?

由於logout()函數,我總是希望看到用戶名/登錄窗口。 相反,它似乎是一個“緩存”機制,重新填充憑證並取消我的注銷...

這就是HTTP BASIC AUTH的設計方式,它允許所有身份驗證狀態保存在客戶端中。 換句話說, 無法使用基本/摘要式身份驗證進行注銷,服務器無法阻止客戶端緩存並在后續請求到服務器時重新發送BASIC身份驗證器。

我的建議是使用基於表單的身份驗證和HTTPServletRequestlogin方法。

參考

它既不是。 登錄后,瀏覽器將始終將您的用戶ID和密碼傳遞給URL。 直到重新啟動瀏覽器。 據我所知,每個瀏覽器都這樣做。 據我所知,目前無法告訴瀏覽器忘記憑據。

但是,一旦退出,您將看到您的會話將有所不同。 通常的解決方案是在會話中添加某種變量。 說“登錄”。 如果缺少此變量,您知道用戶必須先登錄,然后您將重定向到login.jsp。 一旦用戶通過此jsp,您再次設置此變量。

使用過濾器可以在整個系統范圍內強制執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM