![](/img/trans.png)
[英]Logout servlet doesn't work: first last name and logout button are still visible after logout
[英]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身份驗證器。
我的建議是使用基於表單的身份驗證和HTTPServletRequest
的login
方法。
它既不是。 登錄后,瀏覽器將始終將您的用戶ID和密碼傳遞給URL。 直到重新啟動瀏覽器。 據我所知,每個瀏覽器都這樣做。 據我所知,目前無法告訴瀏覽器忘記憑據。
但是,一旦退出,您將看到您的會話將有所不同。 通常的解決方案是在會話中添加某種變量。 說“登錄”。 如果缺少此變量,您知道用戶必須先登錄,然后您將重定向到login.jsp。 一旦用戶通過此jsp,您再次設置此變量。
使用過濾器可以在整個系統范圍內強制執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.