Summary

We should be able to use an argument resolver for the RSocket Support in Spring

Comment From: nofelkad

Adding @AuthenticationPrincipal to messageMapping method gives

java.lang.NullPointerException
    at io.rsocket.util.ByteBufPayload.sliceData(ByteBufPayload.java:149)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Assembly trace from producer [reactor.core.publisher.FluxMapFuseable] :
    reactor.core.publisher.Flux.map(Flux.java:5892)
    org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:170)
Error has been observed at the following site(s):
    |_            Flux.map ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:170)
    |_  Flux.doOnSubscribe ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:170)
    |_            Flux.map ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.extractContent(PayloadMethodArgumentResolver.java:178)
    |_           Flux.next ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.decodeContent(PayloadMethodArgumentResolver.java:247)
    |_            Mono.map ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.decodeContent(PayloadMethodArgumentResolver.java:248)
    |_          Mono.error ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.lambda$decodeContent$5(PayloadMethodArgumentResolver.java:249)
    |_  Mono.onErrorResume ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.decodeContent(PayloadMethodArgumentResolver.java:249)
    |_  Mono.switchIfEmpty ⇢ at org.springframework.messaging.handler.annotation.reactive.PayloadMethodArgumentResolver.decodeContent(PayloadMethodArgumentResolver.java:251)
    |_ Mono.defaultIfEmpty ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:184)
    |_      Mono.doOnError ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:185)
    |_            Mono.zip ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:192)
    |_        Mono.flatMap ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:128)
    |_  Mono.switchIfEmpty ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHelper.handleMessage(InvocableHelper.java:195)
    |_        Mono.flatMap ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHelper.handleMessage(InvocableHelper.java:196)
    |_          Mono.error ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHelper.lambda$handleMessage$4(InvocableHelper.java:200)
    |_  Mono.onErrorResume ⇢ at org.springframework.messaging.handler.invocation.reactive.InvocableHelper.handleMessage(InvocableHelper.java:197)
    |_          Mono.defer ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:173)
    |_      Mono.doFinally ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:174)
    |_       Mono.thenMany ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:180)
    |_       Mono.thenMany ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:180)
    |_       Mono.thenMany ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.handleAndReply(MessagingRSocket.java:180)
    |_           Flux.next ⇢ at org.springframework.messaging.rsocket.annotation.support.MessagingRSocket.requestResponse(MessagingRSocket.java:122)
    |_        Mono.flatMap ⇢ at org.springframework.security.rsocket.core.PayloadInterceptorRSocket.requestResponse(PayloadInterceptorRSocket.java:84)

I followed this for jwt with spring boot 2.2.2.RELEASE.

Although, i can see ReactiveSecurityContextHolder getting set with authentication object onAuthenticationSuccess but it's empty when tried getting the same in the controller method.

Thanks