Spring Security 订阅时,Mono不发出值

nnsrf1az  于 2023-02-23  发布在  Spring
关注(0)|答案(1)|浏览(224)

我正在尝试使用Spring Security验证Reactive Spring应用程序中的身份验证。我无法从控制器中的Mono读取内容。当我订阅时,它没有发出任何值。我在控制器中有以下代码:

@Controller
public class TestConroller {

 public void test(){
   Mono<Authentication> monoAuth=ReactiveSecurityContextHolder.getContext().map(SecurityContext::getAuthentication);
   monoAuth.subscribe(authentication->validate(authentication) 
 }
 private void validate(Authentication authentication){
   System.out.println(authentication.getPrincipal().getName());
 }
}

从不调用validate方法

wlwcrazw

wlwcrazw1#

虽然 “订阅之前什么都不会发生”,但你不需要显式调用subscribe,如果你返回Mono<T>,WebFlux会在幕后订阅,你只需要构建一个结合不同React式运营商的流。

public Mono<String> test() {
        return ReactiveSecurityContextHolder.getContext()
                .map(ctx -> validate(ctx.getAuthentication()));
    }
    
    private String validate(Authentication authentication){
        String name = ((Principal) authentication.getPrincipal()).getName();

        // validate
        return name;
    }

相关问题