我的應用程式中有 tomcat 身份驗證(表單身份驗證),在成功身份驗證后,我可以通過我的 servlet 中的 request.getRemoteUser() 方法獲取用戶名。我可以在哪里找到 request.getRemoteUser() 代碼?這是如何作業的?已設定和存盤 RemoteUser 的位置。由于 http 請求是無狀態的并且獨立執行,這如何在所有后續請求中提供用戶名?
uj5u.com熱心網友回復:
為了處理身份驗證,Tomcat 中的每個背景關系都有一個Valvethat extends AuthenticatorBase,即:
- 嘗試使用 中的資料對用戶進行身份驗證
HttpServletRequest, - 檢查 URL 的授權要求,
- 如果需要身份驗證但不存在,則向瀏覽器發送適當的回應,要求進行身份驗證。這通常意味著
401回應帶有WWW-Authenticate大多數身份驗證方法的標頭或302重定向到登錄頁面以進行表單身份驗證。 - 如果存在身份驗證,但未授權訪問,則發送
403回應。 - 否則呼叫
Request#setUserPrincipal并繼續下一個閥門。
有關詳細資訊,請檢查AuthenticatorBase#invoke方法。
大多數身份驗證方法基于Authorization瀏覽器發送的標頭(表單身份驗證器使用請求引數)。
如果存在會話(例如,您呼叫了HttpServletRequest#getSession),經過身份驗證的用戶將被快取在會話中,并且后續請求將不再需要進行身份驗證。您可以使用alwaysUseSession身份驗證器閥門上的屬性強制創建會話(參見檔案)。服務器可以通過多種方法識別先前建立的會話的存在:
JSESSIONIDCookie請求中的標頭,- 一個
jsessionidURL路徑引數, - 如果您使用 TLS,則 TLS 會話還可用于檢測適當的 HTTP 會話。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/381057.html
