簡體   English   中英

如何從 WebFlux 中的 ReactiveSecurityContextHolder 獲取當前用戶?

[英]How to get current user from ReactiveSecurityContextHolder in WebFlux?

通常在使用 Spring 引導時,獲取當前登錄用戶的常用方法是使用:

SecurityContextHolder.getContext();

這在使用響應式編程和 Java 中的 Mono 時不起作用,因為它們不屬於同一個線程。 建議使用:

ReactiveSecurityContextHolder.getContext()

我已經閱讀了許多文章、StackOverflow 問題和答案,但從未找到關於如何完全集成 ReactiveSecurityContextHolder 的完整解釋或示例。

任何幫助將不勝感激。

假設安全配置正確。 Spring 安全性在訂閱期間初始化ReactiveSecurityContextHolder ,以便您可以使用ReactiveSecurityContextHolder.getContext()在此鏈中訪問它:

@GetMapping
Mono<Void> getItems() {
    return ReactiveSecurityContextHolder.getContext()
            .map(SecurityContext::getAuthentication)
            .doOnNext(auth -> log.info(String.valueOf(auth)))
            .then();
}

樣品 output:

UsernamePasswordAuthenticationToken [Principal=org.springframework.security.core.userdetails.User [Username=admin, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_ADMIN]], Credentials=[PROTECTED],Authenticated=true,Details=null,Granted Authorities=[ROLE_ADMIN]]

暫無
暫無

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

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