Interface AuthPrincipalLookup
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
登入引擎的主體查找 SPI(ADR-023)
LoginService 於刷新(refresh token 無認證流程可攜帶 principal)與登入 fallback 時
以此載入主體。消費端以自己的持久化實作(參考實作為 AccountDetailsService 兼任——
與 UserDetailsService 同一資料來源,保證登入與刷新看到一致的權限集)。
與 UserDetailsService 的差異:回傳 Optional 而非拋 UsernameNotFoundException
(查無主體是引擎的正常分支,實際 HTTP 投影由 ErrorDisclosurePolicy 決定),且回傳型別鎖
AuthPrincipal(引擎需要 AuthPrincipal.interactiveLoginAllowed() 資格判定)。
-
Method Summary
Modifier and TypeMethodDescriptiondefault Optional<? extends AuthPrincipal> findBySubject(String subject) 依 JWTsub的穩定主體識別載入主體。Optional<? extends AuthPrincipal> findByUsername(String username) 依登入身分識別子載入主體
-
Method Details
-
findByUsername
依登入身分識別子載入主體- Parameters:
username- 登入身分識別子- Returns:
- 主體;查無時
Optional.empty()(引擎保留 username-not-found 原因供揭露政策投影)
-
findBySubject
依 JWT
sub的穩定主體識別載入主體。舊實作未區分登入名稱與 subject 時可沿用預設;使用不可變 account id 當 subject 的 應用應覆寫本方法。登入引擎的 refresh 路徑只使用本方法,避免以可能重複的 username 重載到錯誤帳號。
-