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.

@FunctionalInterface public interface AuthPrincipalLookup

登入引擎的主體查找 SPI(ADR-023

LoginService 於刷新(refresh token 無認證流程可攜帶 principal)與登入 fallback 時 以此載入主體。消費端以自己的持久化實作(參考實作為 AccountDetailsService 兼任—— 與 UserDetailsService 同一資料來源,保證登入與刷新看到一致的權限集)。

UserDetailsService 的差異:回傳 Optional 而非拋 UsernameNotFoundException (查無主體是引擎的正常分支,實際 HTTP 投影由 ErrorDisclosurePolicy 決定),且回傳型別鎖 AuthPrincipal(引擎需要 AuthPrincipal.interactiveLoginAllowed() 資格判定)。

  • Method Details

    • findByUsername

      Optional<? extends AuthPrincipal> findByUsername(String username)
      依登入身分識別子載入主體
      Parameters:
      username - 登入身分識別子
      Returns:
      主體;查無時 Optional.empty()(引擎保留 username-not-found 原因供揭露政策投影)
    • findBySubject

      default Optional<? extends AuthPrincipal> findBySubject(String subject)

      依 JWT sub 的穩定主體識別載入主體。

      舊實作未區分登入名稱與 subject 時可沿用預設;使用不可變 account id 當 subject 的 應用應覆寫本方法。登入引擎的 refresh 路徑只使用本方法,避免以可能重複的 username 重載到錯誤帳號。