Stomp java client auth headers are not send

Viewed 58

when i try to send auth headers via stomp java fx client, they are not passed to the spring boot backend.

Client:

String URL = 'wss://myurl.de/wsconnection'
WebSocketClient client = new StandartWebSocketClient(client);
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());

StompSessionHandler sessionHandler = new MyStompSessionHandler();
StompHeaders headers = new Headers();
headers.set("Authorization", "Bearer myToken")
headers.setLogin("Bearer myToken")
stompClient.connect(URL, sessionHandler,headers);

I tried two ways: using the login header method and custom Authorization header. So in the backend i try to get a jwt through one of these two headers. Unfortunatly the jwt value is always null so not passed.

Backend:


@Configuration
public class WebSocketSecurityConf extends AbstractSecurityWebSocketMessageBrokerConfigurer {
    @Override
    protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
        messages.anyMessage().permitAll();
    }

    @Override
    protected boolean sameOriginDisabled() {
        return true;
    }

}
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
   

    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.setInterceptors(new ChannelInterceptorAdapter() {
            @Override
            public Message<?> preSend(Message<?> message, MessageChannel channel) {
                StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
                if (StompCommand.CONNECT.equals(accessor.getCommand())) {
                    String jwtToken;
                    jwtToken = accessor.getFirstNativeHeader("Authorization");
                    if(jwtToken == null){
                        jwtToken = accessor.getFirstNativeHeader("login");
                    }
  
                    System.out.println("webSocket token is "+ jwtToken);
                    System.out.println("accessor header "+ accessor.getMessageHeaders());

Any ideas here?

0 Answers
Related