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